C++学习(4)——继承中的二义性问题和虚基类

来源:互联网 发布:matlab矩阵qr分解 编辑:程序博客网 时间:2024/06/13 04:57
#include<iostream>#include<stdio.h>using namespace std;/************************************************************************* 二义性问题************************************************************************///基类class CBase{    int a;public:    int x;    void func();};//派生类1class CDerive1:public CBase //可以添加virtual虚基类{    int b;public:    int y;    void func1();};//派生类2class CDerive2:public CBase//可以添加virtual虚基类{    int c;public:    int z;    void func2();};//子派生类class CDerive12:CDerive1,CDerive2{    int d;public:    int yz;    int func12()    {        //x=10;    //error C2385: 'CDerived12::x' is ambiguous        //func();    //error C2385: 'CDerived12::func' is ambiguous        CDerive1::x=10;            CDerive1::func();            return 0;    }};int main(){    CDerive12 obj;    return 0;}
解决二义性问题的方法:
1.利用范围运算符指明所要调用的成员的类属范围;
2.在派生类中重新定义一个与基类中同名的成员,使该成员隐蔽基类的同名成员;
3.将公共基类说明为虚基类,避免在派生类中保留多个基类的备份,而只保存一个实例
 

原创粉丝点击