《C++初阶之类和对象》【类 + 类域 + 访问限定符 + 对象的大小 + this指针】
类(Class):是对具有相同 属性(数据)和方法(行为)的一组对象的抽象描述类是 C++ 的核心特性之一,用于实现 面向对象编程(OOP)中的封装类是对象的蓝图,定义了对象的属性(数据成员)和行为(成员函数)一个形象的例子:比如 “人类”,可以有姓名、年龄等属性,以及说话、行走等行为,在编程里就可据此定义一个 “人类” 的类。代码语言:javascriptAI代码解释public:age = a
------------类的定义---------------
什么是类?
类(Class):是对具有相同属性(数据)和方法(行为)的一组对象的抽象描述
- 类是 C++ 的核心特性之一,用于实现
面向对象编程(OOP)中的封装 - 类是对象的蓝图,定义了对象的 属性(数据成员) 和 行为(成员函数)
一个形象的例子:比如 “人类”,可以有姓名、年龄等属性,以及说话、行走等行为,在编程里就可据此定义一个 “人类” 的类。
怎么定义类?
代码语言:javascript
AI代码解释
class Person
{
public:
void setAge(int a)
{
age = a;
}
int getAge()
{
return age;
}
private:
};
C++使用
class关键字定义,类中包含以下三部分的内容。 类的基本结构:关键的三个组成部分
- 数据成员(属性):类的变量(如:
int age;) - 成员函数(方法):类的函数(如:
void setAge(int a) 和 int getAge()) - 访问修饰符:
public:任何地方可访问protected:类及其子类可访问private:仅类内部访问(默认)
关于类需要注意什么?
下面博主挑选了四个关于“类”需要注意的事项,它们分别是关于:
- 类定义的语法规范
- 成员变量的命名约定
struct与class的区别- 类内定义的成员函数与内联
1. 类定义的语法规范:
分号结尾:类定义结束时必须使用分号 ;,这是 C++ 语法的强制要求。
代码语言:javascript
AI代码解释
class MyClass // 类定义开始
{
// 成员...
}; // 分号不可省略!
2. 成员变量的命名约定:
命名前缀 / 后缀:为避免成员变量与局部变量或函数参数重名,通常添加特殊标识:
代码语言:javascript
AI代码解释
class Person
{
private:
int m_age; // m_前缀(Microsoft风格)
std::string _name; // 前缀(常见于开源项目)
double salary_; // 后缀(Google风格)
};
注意:C++ 标准并未强制要求此规则,具体风格需遵循团队或项目规范。
3. struct 与 class 的区别:
|
特性 |
struct |
class |
|---|---|---|
|
默认访问权限 |
public |
private |
|
设计哲学 |
数据聚合(POD, Plain Old Data) |
封装复杂逻辑(OOP) |
|
常见用途 |
轻量级数据容器、C 兼容结构 |
封装、继承、多态 |
示例对比:
代码语言:javascript
AI代码解释
struct Point
{
int x, y; // 默认public
void move(int dx, int dy); //注意:可定义函数
};
class Rectangle
{
int width, height; // 默认private
public:
int area() const
{
return width * height;
}
};
4. 类内定义的成员函数与内联:
隐式内联:在类内部直接定义的成员函数会被编译器视为 inline 函数(但最终是否内联由编译器决定)
代码语言:javascript
AI代码解释
class Math
{
public:
int add(int a, int b) // 隐式内联
{
return a + b;
}
};
显式内联:若在类外定义函数,需显式使用 inline 关键字(通常在头文件中):
代码语言:javascript
AI代码解释
// Math.h
class Math
{
public:
int multiply(int a, int b); // 声明
};
// Math.cpp
inline int Math::multiply(int a, int b) // 显式内联
{
return a * b;
}
注意事项:
- 内联函数的定义必须在每个调用它的翻译单元(.cpp 文件)中可见,因此通常直接放在头文件中。
- 现代编译器会智能优化内联决策,即使未声明
inline,简单函数也可能被自动内联
更多推荐


所有评论(0)