在C++中,类内的成员变量和成员函数分开存储
只有非静态成员变量才属于类的对象上
首先先看一下空对象占用多少空间:
#include <iostream>
using namespace std;
//成员变量和成员函数是分开存储的
class Person {
};
void test01() {
Person p;
cout << "size of p = " << sizeof(p) << endl;
}
int main() {
test01();
system("pause");
return 0;
}
结果为size of p = 1;
空对象占用内存空间为:1
为什么是1呢?
因为C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置。
每个空对象也应该有一个独一无二的内存地址,因此编译器会给每个空对象分配一个字节作为区分。
现在我们给空对象里面int m_A,看看结果是多少?
代码如下:
#include <iostream>
using namespace std;
//成员变量和成员函数是分开存储的
class Person {
int m_A;//非静态变量 属于类对象上的数据
};
void test01() {
Person p;
cout << "size of p = " << sizeof(p) << endl;
}
int main() {
test01();
system("pause");
return 0;
}
结果为size of p = 4
说明:
非静态变量m_A属于类的对象上
现在我们往类中static int m_B,看看结果又如何?
void func()//非静态函数,结果又如何?
static void func2()呢?
代码如下:
#include <iostream>
using namespace std;
//成员变量和成员函数是分开存储的
class Person {
int m_A;
static int m_B;//静态成员变量
void func()
{
}
static void func2()
{
}
};
int Person::m_B = 0;//静态成员变量特点,类内声明,类外初始化。不属于类对象上
void test01() {
Person p;
cout << "size of p = " << sizeof(p) << endl;
}
int main() {
test01();
system("pause");
return 0;
}
结果都仍然为:4
1.说明静态成员变量不属于类对象上。
2.说明成员函数(包括静态和非静态)与成员变量分开存储。
每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码,那么问题是:
这一块代码是如何区分哪个对象调用自己的呢?
C++通过提供特殊的对象指针,this指针解决上述问题。