C++虚继承
2022/1/4 11:37:48
本文主要是介绍C++虚继承,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++支持多重继承,若如图所示,BC继承于A,D继承于BC。
若BC继承于A属于public,当创建D时,会创建2个A和1个BCD。第一会浪费空间(创建了2个A),第二,当D调用A的成员函数(包括虚函数)时,会产生二义性,不知道应该调用哪个A。
1 class A 2 { 3 public: 4 A() { cout << "constructor A" << endl; } 5 ~A() { cout << "destructor A" << endl; } 6 void show() { cout << "A" << endl; } 7 virtual void test() { cout << "A test" << endl; } 8 }; 9 10 class B: public A 11 { 12 public: 13 B() { cout << "constructor B" << endl; } 14 ~B() { cout << "destructor B" << endl; } 15 }; 16 17 class C: public A 18 { 19 public: 20 C() { cout << "constructor C" << endl; } 21 ~C() { cout << "destructor C" << endl; } 22 }; 23 24 class D: public B, public C 25 { 26 public: 27 D() { cout << "constructor D" << endl; } 28 ~D() { cout << "destructor D" << endl; } 29 }; 30 31 int main() 32 { 33 D d; 34 d.test(); // 报错,d.test() 不明确 35 d.show(); // 报错,d.show() 不明确 36 37 return 0; 38 }
若将BC继承A改为virtual public,那么创建D时,只会创建1个ADCD,且调用A的成员函数不会产生二义性。
这篇关于C++虚继承的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升