定义了三个类
#include <iostream.h>
class ClassTestA
{
public:
int m_data1;
int m_data2;
void func1() {}
void func2() {}
virtual void vfunc1() {}
virtual void vfunc2() {}
};
class ClassTestB:public ClassTestA
{
public:
int m_data3;
void func2() {}
virtual void vfunc1() {}
};
class ClassTestC:public ClassTestB
{
public:
int m_data1;
int m_data4;
void func2() {}
virtual void vfunc1() {}
};
//主函数如下
int main()
{
// cout<<"ClassTestA的大小:"<<sizeof(ClassTestA)<<endl;
// cout<<"ClassTestB的大小:"<<sizeof(ClassTestB)<<endl;
// cout<<"ClassTestC的大小:"<<sizeof(ClassTestC)<<endl;
ClassTestA classa;
ClassTestB classb;
ClassTestC classc;
classb.m_data1 = 1;
classb.m_data2 = 2;
classb.m_data3 = 3;
classc.m_data1 = 11;
classc.m_data2 = 22;
classc.m_data3 =33;
classc.m_data4 = 44;
classc.ClassTestA::m_data1 = 111;
classc.ClassTestA::m_data2 = 222;
cout<<"classb.m_data1:\t"<<classb.m_data1<<endl;
cout<<"classb.m_data2:\t"<<classb.m_data2<<endl;
cout<<"classb.m_data3:\t"<<classb.m_data3<<endl;
cout<<"classc.m_data1:\t"<<classc.m_data1<<endl;
cout<<"classc.m_data2:\t"<<classc.m_data2<<endl;
cout<<"classc.m_data3:\t"<<classc.m_data3<<endl;
cout<<"classc.m_data4:\t"<<classc.m_data4<<endl;
cout<<"classc.ClassTestA.m_data1:\t"<<classc.ClassTestA::m_data1<<endl;
cout<<"classc.ClassTestA.m_data2:\t"<<classc.ClassTestA::m_data2<<endl;
cout<<"classa对象的起始地址(实质是vptr指针的地址)\t"<<&classa<<endl;
cout<<"classa的成员变量m_data1地址\t"<<&classa.m_data1<<endl;
cout<<"classb对象的起始地址(实质是vptr指针的地址)\t"<<&classb<<endl;
cout<<"classb的成员变量m_data1地址\t"<<&classb.m_data1<<endl;
cout<<"classb的成员变量m_data2地址\t"<<&classb.m_data2<<endl;
cout<<"classb的成员变量m_data3地址\t"<<&classb.m_data3<<endl;
cout<<"classc对象的起始地址(实质是vptr指针的地址)\t"<<&classc<<endl;
cout<<"classc的成员变量m_data1地址\t"<<&classc.m_data1<<endl;
cout<<"classc的成员变量m_data2地址\t"<<&classc.m_data2<<endl;
cout<<"classc的成员变量m_data3地址\t"<<&classc.m_data3<<endl;
cout<<"classc的成员变量m_data4地址\t"<<&classc.m_data4<<endl;
cout<<"classc的成员变量ClassTestA::m_data1地址\t"<<&classc.ClassTestA::m_data1<<endl;
cout<<"classc的成员变量ClassTestA::m_data2地址\t"<<&classc.ClassTestA::m_data2<<endl;
return 0;
}
运行结果如下:
问:1.ClassTestA::m_data1赋值是什么意思,是给classa的m_data1赋值,还是给ClassTestA类的m_data1赋值。。
2.为什么classc在内存中的地址为什么ClassTestA.m_data1的地址要排在最前面(紧挨在虚函数表的后面),而classc.m_data1确要排在classc.m_data3的后面,classc.m_data4的前面。如下图所示:
新手,求大虾帮助