分享

虚基类.cpp

 望穿墙 2013-12-08
/*
 * 虚基类.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()
 */



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多