目录
类的引入
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完
成。C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。
类的访问限定符
C++中的访问限定符用于控制类中成员的访问权限。C++中有三种访问限定符,即public、private和protected。
-
public: 公有访问限定符,表示成员可以被类内外的任何部分访问。
-
private: 私有访问限定符,表示成员只能被类内部的其他成员访问,类外部无法直接访问。
-
protected: 保护访问限定符,表示成员可以被类内部的其他成员和派生类的成员访问,但不能被类外部的成员访问。
这些访问限定符可以应用于类中的成员变量和成员函数。默认情况下,类中的成员变量和成员函数的访问限定符是private,即默认为私有访问限定符。可以通过在类定义中明确指定访问限定符来改变成员的访问权限。
类对象的大小
一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐,注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。
结构体内存对齐规则:
1. 第一个成员在与结构体偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS中默认的对齐数为8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
tips:类对象的储存方式:只保存成员变量,成员函数存放在公共的代码段
this指针
this指针是一个隐含于每个非静态成员函数的特殊指针。它指向当前对象的地址,用于在成员函数中访问对象的成员变量和成员函数。
在C++中,每个对象都有自己的一份成员变量,而成员函数被所有对象所共享。当调用对象的成员函数时,编译器会自动地将对象的地址作为隐藏参数传递给该函数,这就是this指针的作用。
this指针使用的语法是在成员函数中使用"this->"来访问对象的成员。例如,如果在一个成员函数中访问成员变量x,可以使用"this->x"来表示当前对象的成员变量x。
this指针还可以用于返回对象本身。在成员函数中,可以使用"return *this;"来返回当前对象。这对于实现链式调用非常有用。
下面是一个简单的示例,演示了this指针的使用:
#include <iostream>
class MyClass {
int x;
public:
void setX(int value) {
this->x = value;
}
void printX() {
std::cout << "x = " << this->x << std::endl;
}
MyClass add(const MyClass& other) {
MyClass result;
result.x = this->x + other.x;
return result;
}
};
int main() {
MyClass obj1;
obj1.setX(5);
obj1.printX(); // 输出:x = 5
MyClass obj2;
obj2.setX(10);
MyClass obj3 = obj1.add(obj2);
obj3.printX(); // 输出:x = 15
return 0;
}
在上面的示例中,setX()函数使用this指针来设置当前对象的成员变量x;printX()函数使用this指针来打印当前对象的成员变量x;add()函数使用this指针来访问当前对象和另一个对象的成员变量,并返回一个新的对象。