C++虚继承
来源:互联网 发布:maka软件下载(中文版) 编辑:程序博客网 时间:2024/05/19 02:02
C++虚继承概念:
Virtual Inheritance 虚继承,解决从不同途径继承来的同名数据成员在内存中不同的数据拷贝导致的数据不一致问题,将共同的基类设置为虚基类。这时从不同路径继承来的数据成员在内存中只有一份拷贝,同名函数也只有一个映射。
语法:
Class C:virtual public A,virtual public B,…,virtual public n
{
}
执行顺序
1.执行虚基类的构造函数,多继承按照继承顺序构造
2.执行基类的构造函数,多继承按照继承顺序构造
3.执行成员对象的构造函数,多个成员对象按照申明顺序构造
4.执行派生类自己的构造函数
备注:执行析构的顺序与以上顺序相反
在执行虚基类构造函数的时候,如果是多重继承
虚继承与普通继承的区别
普通继承: C继承A 表明C “is a”即苹果就是水果
虚继承: C虚继承A 表明C “has a”即苹果是水果,但是苹果也可以是手机,C有了一个调用A的vptr
普通继承:
// Virtual_Exercise.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"class A{public: A(); void print() { printf("This A class Aprintf\n"); } ~A();private:};A::A(){ printf("This is A Method\n");}A::~A(){ printf("This is A Destructor\n");}class B: public A{public: B(); ~B(); void A(); void print() { printf("This B class Aprintf\n"); }private:};void B::A(){ printf("this is B's A Method\n");}B::B(){ printf("this is B Method\n");}B::~B(){ printf("This is B Destructor\n");}class C:public A,public B{public: C(); ~C();private:};C::C(){ printf("this is C Method\n");}C::~C(){ printf("this is C Destructor\n");}int _tmain(int argc, _TCHAR* argv[]){ A a; a.print(); B b; b.A(); b.print(); C c; //c.print();这种调用方法会出现错误 c.B::print(); c.A::print(); getchar(); return 0;}
虚继承:
// Virtual_Exercise.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"class A{public: A(); void print() { printf("This A class Aprintf\n"); } ~A();private:};A::A(){ printf("This is A Method\n");}A::~A(){ printf("This is A Destructor\n");}class B: virtual public A{public: B(); ~B(); void A(); void print() { printf("This B class Aprintf\n"); }private:};void B::A(){ printf("this is B's A Method\n");}B::B(){ printf("this is B Method\n");}B::~B(){ printf("This is B Destructor\n");}class C: virtual public A,virtual public B{public: C(); ~C();private:};C::C(){ printf("this is C Method\n");}C::~C(){ printf("this is C Destructor\n");}int _tmain(int argc, _TCHAR* argv[]){ A a; a.print(); B b; b.A(); b.print(); C c; c.print();//这样就可以调用了 //c.B::print(); //c.A::print(); getchar(); return 0;}
看一下,调用方式及输出结果都有了变化^_^,细心的观众是不是发现虚继承的方法比普通继承的方法输出少了一次“This is A Method”
好了,希望能对您有所帮助。
0 0
- C++-虚继承
- C++【多重继承和虚继承】
- (C++)继承、菱形继承和虚继承的那些事儿
- C++,继承、虚函数解惑!
- C++,继承、虚函数解惑!
- c继承
- C++----------------继承
- 【c#】继承
- C++:继承
- C++::继承
- [C++]继承
- 【C++】继承
- 【C#】继承
- 【c++】继承
- 【C++】继承
- c#-继承
- 【C++】 继承
- 【C#】继承
- stl中lis的使用
- Epoll多路IO复用模型
- postgresql游标的简单使用
- java抽象类和接口的区别
- zend studio 10破解/汉化
- C++虚继承
- 信息系统管理项目监理工作:四控三管一协调
- java_汉字转汉语拼音
- hadoop 入门级 实战
- html打开乱码
- springmvc文件上传下载
- Android自定义控件系列一:Android如何实现老版优酷客户端三级环形菜单
- 骑猪去遛狗
- Android学习笔记——Android中Cursor类的概念和用法