类的内存分配问题

#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;
}

  

posted @ 2015-11-29 20:08  suonikeyinsu  Views(175)  Comments(0Edit  收藏  举报