C++之菱形继承的解决之道
来源:互联网 发布:淘宝中的淘气值能干嘛 编辑:程序博客网 时间:2024/05/19 14:50
对于上文中的菱形继承,存在二义性的问题的解决方案:
1.直接继承祖先的两个基类,在继承时使用virtual
2.通过多重继承而来的那个子类(孙子辈的类),在构造函数时,要调用祖先类的构造函数
,孙子辈的派生类,直接继承祖先类的成员,在继承两个父类各自拓展的成员
如图所示:
由之前的图1中的派生关系到virtual继承关系
由之前的图2中的构造关系到箭头所示的关系
//菱形继承#include "stdafx.h"#include<stdlib.h>#include<iostream>using namespace std;class R//祖先类{private:int r;public:R(int anInt):r(anInt){}void printOn()const{cout << "r = " << r << endl;}};//父类class A :virtual public R//注意变成了虚继承{private:int a;//父类A会有一份rpublic:A(int i,int j):R(i),a(j){}};//父类class B :virtual public R//注意变成了虚继承{private:int b;//父类B会有一份rpublic:B(int i, int j) :R(i), b(j) {}};//子类class C :public A, public B{private:int c;//子类C会有两份r,一份来自A,一份来自Bpublic:C(int i,int j,int k,int l):R(i),A(i,j),B(i,k),c(l)//注意修改构造函数,直接构造祖父辈的类R(i){}};int main(){R rr(10);A aa(20, 30);B bb(40, 50);C cc(5, 7, 9,10);rr.printOn();aa.printOn();bb.printOn();cc.printOn(); system("pause");return 0;}
0 0
- C++之菱形继承的解决之道
- 【C++】菱形继承与虚拟菱形继承的对比分析
- (C++)继承、菱形继承和虚继承的那些事儿
- 【C++】继承和多态之——菱形继承
- 【C++】菱形继承
- 【c++】菱形继承
- 【c++】菱形继承
- 【C++】继承(菱形继承)
- <c++>继承及菱形继承
- c++之菱形继承
- c++之菱形继承
- C++之菱形继承
- c++ 之菱形继承
- C++之菱形继承
- c++-关于菱形继承&虚继承的问题总结
- 《C++多态的对象模型之单/多继承、菱形/菱形虚拟继承》
- 菱形的虚拟继承
- 菱形继承的识别
- css3 animation与jQuery animate()区别
- 使用Spring的@Scheduled实现定时任务
- 【C++学习笔记】结构简介
- 机器学习笔记--实现简单的神经网络
- java基础面试题大全(一)
- C++之菱形继承的解决之道
- 计算机专外Week6-Exercises
- springmvc拦截器
- 利用CSS3 text-overflow换行
- Linux中退出/保存
- AndroidAPI学习——任务和返回栈
- C语言--完数
- .NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱
- 求最大公约数,最小公倍数