/* * 虚基类.cpp * * Created on: 2013-10-20 * Author: Administrator */ #include<iostream> using namespace std; class BaseB0 { public: int nV; void fun() { cout << "在BaseB0成员函数fun()中" << "数据成员nV = " ; } }; class BaseB1: virtual public BaseB0 // BaseB0为虚基类,派生BaseB1类 { public: //新增外部接口 int nV; }; class BaseB2: virtual public BaseB0 { public: //新增外部接口 int nV; /* void fun() { cout << "在BaseB2成员函数fun()中" << "数据成员nV = " ; } */ }; class BaseC: public BaseB1, public BaseB2 //派生类BaseC声明 { public: int nV; void fund() { cout << "在BaseC成员函数fun()中" << "," ; } }; int main(void) { BaseC c; c.nV = 2; c.fun(); cout << c.nV << endl; c.fund(); return 0; } /* * 从上述程序可以看出 虚基类中的数据成员nV和成员函数fun()在其派生类中只有一个拷贝 * 若不止一份拷贝的话c.fun();会提示出错(模糊不清) 因为BaseC继承了两个类 那两类都继承了基类的fun()函数 * 输出为: * 在BaseB0成员函数fun()中数据成员nV = 2 * 在BaseC成员函数fun()中, * * 若BaseB2中加入 * void fun() { cout << "在BaseB2成员函数fun()中" << "数据成员nV = " ; } 则结果为 * 在BaseB2成员函数fun()中数据成员nV = 2 * 在BaseC成员函数fun()中, * 原因是BaseB2 的fun()覆盖了基类的fun() */ |
|