多继承中的三角问题(虚继承来解决)

来源:互联网 发布:ubuntu 官方壁纸 编辑:程序博客网 时间:2024/06/02 04:59

多继承中的三角问题(虚继承来解决)

#include "stdafx.h"#include <iostream>using namespace std;#if 0虚继承(virtual)的意义在多继承中,保存共同基类的多份同名成员,虽然有时是必要的,可以在不同的数据成员中分别存放不同的数据,但在大多数情况下,是我们不希望出现的。因为保留多份数据成员的拷贝,不仅占有较多的存储空间,还增加了访问的困难。为此,c++提供了,虚基类和虚继承机制,实现了在多继承中只保留一份共同成员。虚基类,需要设计和抽象,虚继承,是一种继承的扩展虚继承语法:class 派生类名:virtual 继承方式 基类多个父类中有同名的成员,被继承到子类当中去后,会给访问带来很大的不方便,浪费空间需要解决多继承当中,同名成员被继承后引起的访问混乱目标:使z中只有一个data setData和getData操作的是同一个data提取公因式#endifclass M{public:M(int i) :data(i){}int data;};class X:virtual public M{public:X(int i):M(i){}void setData(int i){data = i;}};class Y:virtual public M{public:Y(int i) :M(i){}int getData(){return data;}};class Z :public X, public Y{public:Z():X(2),Y(3),M(100){}//这时只与M有关系 和前面的X Y都没关系void dis(){//cout << X::data << endl;//cout << Y::data << endl;cout << data << endl;}};int _tmain(int argc, _TCHAR* argv[]){Z z;z.dis();z.setData(100000);cout << z.getData() << endl;z.dis();return 0;}




原创粉丝点击