您的位置:首页 > 其它

类的内存分配问题

2015-11-29 20:08 316 查看
#include <iostream>

using namespace std;

class A
{
public:
//static 成员不占用类对象的内存空间,且必须在类外定义
const static int css;
static const int cs;
static int s;
static int s2;
int n;
char ch;//4字节对齐,类A对象占用8个字节

//类对象并不为函数成员分配内存
void func(void);
static void staticfunc(void);//static函数类中声明,类外定义
static void staticfunc2(void)//static函数在类中声明并定义
{
cout << "class A static func2 test..." << endl;
}
virtual void vfunc(void);//当类中含有虚函数时,类对象的大小+4,vtable pointer, &vptr地址即类对象的地址

virtual void vfunc2(void)
{
cout << "class A virtual func2 test..." << endl;
}

//包含纯虚函数的类不能定义对象,一般作为抽象类, 抽象类不能实例化
//virtual void purevfunc(void)  =0;
};

int A::s = 1;//成员s 被分配在全局静态区,只能通过类名进行访问
int A::s2 = 2;
const int A::css = 0;//成员css 被分配在常量区,也只能通过类名进行访问
const int A::cs = 0;

void A::func(void)
{
cout << "class A func test" << endl;
}

void A::staticfunc(void)
{
cout << "class A static func test..." << endl;
cout << "s=" << A::s << endl;
}

void A::vfunc()
{
cout << "class A virtual func test..." << endl;
}

//一个空类的对象占用1个字节的空间.
class B
{
};

int main(int argc, char** argv)
{
A a;
B b;
cout << "sizeof b:"<< sizeof(b)  << endl;

cout << "sizeof class a:"<< sizeof(a)  << endl;
cout << "a adr:" << &a << endl;
cout << "a.n addr" << &a.n << endl;

cout << "static s:" << A::s << "    addr s:" << &(A::s) <<  endl;
cout << "static s2:" << A::s2 << "    addr s2:" << &A::s2 <<  endl;
cout << "const static css:" << A::css << "     addr css:" << &(A::css) <<  endl;
//a.cs = 10;
cout << "const cs:" << A::cs<< "    addr cs: " << &A::cs << endl;

//想测试成员函数的地址,但打印和预想不一样
a.func();
void (A::*p)(void)  = &A::func ;
cout << "func addr : "<< p << endl;

A::staticfunc();//类名直接调用的方式
a.staticfunc();//对象调用的方式
A::staticfunc2();
a.staticfunc2();

a.vfunc();
//A::vfunc();//不能通过类名调用虚函数
a.vfunc2();

return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: