0.没有任何成员变量的空类,实际上占用空间为1字节。
这是因为当你的使用代码实例化一个类的时候,tea对象就有了空间,&tea是有地址的,那么你这个地址至少要占用1个字节才合理。
Teacher tea;
就像我们买房子,你的房子是有地址的,哪怕这个地址只有一个平方,就像一个对象,C++给分配的大小就是1个字节。
1.成员变量包含在每个对象中,是占用 对象 字节的。
2.成员函数虽然也写在类的定义中,但是成员函数不占用 对象 字节数。成员函数每个类只诞生一个(跟着类走),不管你用这个类产生了多少个对象
class Teacher1 {
};
class Teacher2 {
public:
void func1() {
}
void func2() {
}
void func3() {
}
};
class Teacher3 {
public:
int age;
void func1() {
}
void func2() {
}
void func3() {
}
};
int main()
{
std::cout << "Hello World aaa!\n";
//1.空类的大小是1
Teacher1 tea1;
cout << sizeof(Teacher1) << endl;//结果是1
cout << sizeof(tea1) << endl;//结果是1
//2.类的成员函数不占用 类对象 的内存空间
Teacher2 tea2;
cout << sizeof(Teacher2)<<endl;//结果是1
cout << sizeof(tea2) << endl;//结果是1
//3.类的成员变量占用类对象的空间,且一旦有了成员变量,那么你的房子就不再需要占位的那个1字节了。
Teacher3 tea3;
cout << sizeof(Teacher3) << endl;//结果是4
cout << sizeof(tea3) << endl;//结果是4
//总结:1.成员变量包含在每个对象中,是占用 对象 字节的。
// 2.成员函数虽然也写在类的定义中,但是成员函数不占用 对象 字节数
// 3.成员函数每个类只诞生一个(跟着类走),不管你用这个类产生了多少个对象
}
4.静态变量 和 静态函数 不占用 对象的空间,是跟着类走的
5 虚函数不占用类对象的空间,但是为了指向虚函数表,会生成一个指针,指向这个 "虚函数表",这个指针是放在类对象空间中的。
这里涉及到两个概念,虚函数表,和指向虚函数表的指针。