首页 > 代码库 > C++ 类的继承、虚拟继承、隐藏、占用空间
C++ 类的继承、虚拟继承、隐藏、占用空间
主函数:
1 #include <iostream> 2 #include "test.h" 3 #include "testfuc.h" 4 using namespace std; 5 6 int main(void) 7 { 8 a *p=new b(); 9 10 p->fuc();11 12 cout<<"指针p占用空间"<<sizeof(p)<<endl;13 cout<<"类占用空间"<<sizeof(a)<<endl;14 15 delete p;16 17 return 0;18 }
test.h
1 #ifndef TEST_H 2 #define TEST_H 3 4 class a 5 { 6 public: 7 a(); 8 ~a(); 9 void virtual fuc();10 };11 12 class b:public a13 {14 public:15 b();16 ~b();17 void fuc();18 };19 20 #endif
testfuc.h
1 #ifndef testfuc_h 2 #define testfuc_h 3 4 #include <iostream> 5 using namespace std; 6 7 a::a() 8 { 9 cout<<"a的构造函数"<<endl;10 }11 12 a::~a()13 {14 cout<<"a的析构函数"<<endl;15 }16 17 b::b()18 {19 cout<<"b的构造函数"<<endl;20 }21 b::~b()22 {23 cout<<"b的析构函数"<<endl;24 }25 26 void a::fuc()27 {28 cout<<"a的函数"<<endl;29 }30 31 void b::fuc()32 {33 cout<<"b的函数"<<endl;34 }35 #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的析构函数
C++ 类的继承、虚拟继承、隐藏、占用空间
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。