c++ primer plus阅读笔记14---虚基类
来源:互联网 发布:超声波驱狗器 知乎 编辑:程序博客网 时间:2024/05/21 17:55
虚基类
我们来看一个例子:
class work{ ...};class singer:public work{ ...};class waiter:public work{ ...};class singer_waiter:public singer,public waiter{ ...};
上面的代码中,基类(爷爷)派生了两个子类(父亲),singer_waiter(孙子)继承了两个子类,下面的这个代码中,基类的指针应该指向哪儿?
work *w=new singer_waiter();//这种赋值通常把基类指针指向派生类中基类对象的地址,但是singer_waiter对象中有两个基类(work)对象,所以这个指针到底指向哪个基类对象含糊不清,内存图如下:
为了解决多重继承中的这个问题,引入了虚基类,我们来看代码:
#include <iostream>using namespace std;class grand_farther{public: int flag; grand_farther() { flag=1; cout<<"Grandfarther flag="<<flag<<endl; }};class father1:virtual public grand_farther //继承父类(爷爷)的时候引入关键字virtual{public: father1() { flag=2; cout<<"father1 flag="<<flag<<endl; }};class father2:virtual public grand_farther //继承父类(爷爷)的时候引入关键字virtual{public: father2() { flag=3; cout<<"father2 flag="<<flag<<endl; }};class Son:public father1,public father2{};int main(){ Son *son=new Son(); std::cout<<son->flag<<std::endl; return 0;}
打印结果;
Grandfarther flag=1father1 flag=2father2 flag=33
此时在son对象中只存在一份基类(爷爷)的拷贝。
阅读全文
0 0
- c++ primer plus阅读笔记14---虚基类
- 《C Primer Plus》阅读笔记(4)
- 《C Primer Plus》阅读笔记(3)
- 《C Primer Plus》阅读笔记(2)
- 《C Primer Plus》开头阅读笔记
- C++primer plus阅读笔记第四章
- c++primer plus阅读笔记(一)
- c++primer plus阅读笔记(二)
- c++primer plus阅读笔记(四)
- c++primer plus阅读笔记(五)
- c++primer plus阅读笔记(六)
- c++primer plus阅读笔记(七)
- c++primer plus阅读笔记(八)
- c++primer plus阅读笔记(九)
- c++primer plus阅读笔记(十)
- C Primer Plus - 笔记
- c primer plus笔记
- c primer plus 笔记
- JS 实例代码演示
- 静态工厂方法和实例工厂方法
- 寄存器和锁存器的区别
- Java多线程--上下文切换
- AbstractQueuedSynchronizer的衍生品ReentrantLock(七)- 不响应中断的独占锁
- c++ primer plus阅读笔记14---虚基类
- JS中的数据绑定和DOM回流
- 凸多边形的最优三角剖分
- consul的跨局域网服务发现
- Linq查询
- python的random模块函数分析(一)
- 神经网络中BP(back propagation)到底在干些什么
- 设计模式之-适配器模式
- 数组转化为二叉树并实现对其遍历