成员变量和成员函数分开存储
在C++中,类内的变量和函数虽然都称为成员,但成员变量和成员函数是分开存储的
只有非静态成员变量才属于类的对象上
↓
如何验证呢?就看这个类占有多少内存空间
↓
示例1:首先来看看空对象所占用的内存空间
#include<iostream>
using namespace std;
#include<string>
class Person {
};
int main() {
cout << sizeof(Person) << endl;
system("pause");
return 0;
}
空对象所占用内存空间为1
1.C++编译器会给每个空对象也分配一个字节空间,是为了区分对象占内存空间的位置
2.哪怕是两个空对象,它们两个都有独一无二的内存空间,不能两者占用同一块内存空间
3.每个空对象都有独一无二的内存地址
4.注意:这个类到底所占多少内存空间由类中的成员决定
示例2:
#include<iostream>
using namespace std;
#include<string>
class Person1 {
};
// 成员变量和成员函数分开存储的
class Person2 {
public:
int A;// 非静态成员变量,属于类的对象上
};
// 成员变量和成员函数分开存储的
class Person3 {
public:
int A;// 非静态成员变量,属于类的对象上
static int B;// 静态成员变量,不属于类的对象上
void fun1() { // 非静态成员函数,也不属于类的对象;
// 成员和成员函数分开存储
A = 100;
cout << "A=" << A << endl;
}
static void fun2() {
// 静态成员函数,不属于类的对象
}
};
void test01() {
Person2 p2;
cout << "sizeof(只包含非静态成员变量的对象p2)=" << int(sizeof(p2)) << endl;
}
void test02() {
Person3 p3;
cout << "sizeof(完整的对象p3)=" << int(sizeof(p3)) << endl;
}
int main() {
cout << "sizeof(空对象Person1)="<<sizeof(Person1) << endl;
cout << endl;
test01(); cout << endl;
test02();
system("pause");
return 0;
}
由上图我们可以看出,p3类中包含了以下几个成员
1:非静态成员变量A
2:静态成员变量B
3:非静态成员函数fun1
4:静态成员函数fun2
但整个类所占内存空间为4字节,和整个类只包含非静态成员变量A的所占字节数一样,所以说明:
只有非静态成员变量才属于类的对象,剩下的包括:成员函数(无论是静态还是非静态)和静态成员变量等都不属于类的对象。成员变量和成员函数是分开存储的