C++ 类的继承、虚拟继承、隐藏、占用空间

时间:2024-01-08 17:51:20

主函数:

 #include <iostream>
#include "test.h"
#include "testfuc.h"
using namespace std; int main(void)
{
a *p=new b(); p->fuc(); cout<<"指针p占用空间"<<sizeof(p)<<endl;
cout<<"类占用空间"<<sizeof(a)<<endl; delete p; return ;
}
test.h
 #ifndef TEST_H
#define TEST_H class a
{
public:
a();
~a();
void virtual fuc();
}; class b:public a
{
public:
b();
~b();
void fuc();
}; #endif
testfuc.h
 #ifndef testfuc_h
#define testfuc_h #include <iostream>
using namespace std; a::a()
{
cout<<"a的构造函数"<<endl;
} a::~a()
{
cout<<"a的析构函数"<<endl;
} b::b()
{
cout<<"b的构造函数"<<endl;
}
b::~b()
{
cout<<"b的析构函数"<<endl;
} void a::fuc()
{
cout<<"a的函数"<<endl;
} void b::fuc()
{
cout<<"b的函数"<<endl;
}
#endif

运行结果:

a的构造函数

b的构造函数

b的函数

指针p占用空间8

类占用空间8   //每个虚函数的类都要有8字节(64位系统)指针指向自己的虚函数表

a的析构函数

a *p=new b();
改为
b *p=new b();

运行结果:

a的构造函数

b的构造函数

b的函数

指针p占用空间8

类占用空间8

b的析构函数

a的析构函数

将virtual去掉 a *p=new b();

运行结果:

a的构造函数

b的构造函数

a的函数

指针p占用空间8

类占用空间1

a的析构函数

将virtual去掉 b *p=new b();

运行结果:

a的构造函数

b的构造函数

b的函数

指针p占用空间8

类占用空间1

b的析构函数

a的析构函数