4.3.1成员变量和成员函数分开存储
只有非静态的变量属于类的对象上,如果为空类sizeof结果为1.
// An highlighted block
#include<iostream>
using namespace std; //指调用命名空间std内定义的所有标识符
//类作为类成员
//静态函数,所有对象共享一个函数
//所有静态函数只能访问静态成员变量
class Person
{
};
void test01()
{
Person p;
//空对象占有的内存为:1
cout<<"size of p为"<<sizeof(p)<<endl;
}
int main()
{
test01();
system("pause"); //让程序暂停一下,然后按任意键继续
return 0;
}
因为C++编译器会给每个空对象分配一个字节空间,为了区分空对象占内存的位置。每个空对象都应有一个独一无二的内存地址。
下一个测试案例:非空对象内存大小为4。侧面证明非静态成员变量属于类中.
void test02()
{
//非空对象的内存为:4
Person p;
cout<<"size of p为"<<sizeof(p)<<endl;
}
静态成员变量不属于类上,所以运行后,内存大小仍然为4。
// An highlighted block
#include<iostream>
using namespace std; //指调用命名空间std内定义的所有标识符
//类作为类成员
//静态函数,所有对象共享一个函数
//所有静态函数只能访问静态成员变量
class Person
{
int m_A;//非静态成员变量
static int m_B;//定义非静态成员变量
};
int Person::m_B;
void test01()
{
Person p;
//空对象占有的内存为:1
cout<<"size of p为"<<sizeof(p)<<endl;
}
void test02()
{
//非空对象的内存为:4
Person p;
cout<<"size of p为"<<sizeof(p)<<endl;
}
int main()
{
test02();
system("pause"); //让程序暂停一下,然后按任意键继续
return 0;
}
class Person
{
int m_A;//非静态成员变量
static int m_B;//定义非静态成员变量
void func();//非静态成员函数不属于内类
};
综上所述只有非静态成员变量属于类变量上。
|