您的位置:首页 > 编程语言 > C语言/C++

C++派生类继承的理解

2014-11-21 10:37 141 查看
#include<iostream>
using namespace std;
class Base{
public:
Base()
{
a=5;
cout<<"Base a="<<a<<endl;
}
protected:
int a;//如果这里是私有的变量,则在他的所有派生类中都不具有访问权限
//派生类只能直接访问基类 的公有和保护成员
//私有成员仅限于自己使用。
//保护成员则允许派生类使用,而不允许通过对象进行直接调用
//公有类是允许所有的调用
};
class Base1:virtual public Base{
public:
int b1;
Base1()
{
a=a+10;
cout<<"Base1 a="<<a<<endl;
}
};
class Base2:virtual public Base{
public:
int b2;
Base2()
{
a=a+20;
cout<<"Base2 a="<<a<<endl;
}
};
class Derived:public Base1,public Base2{
public:
int d;
Derived()
{
cout<<"Base1::a="<<Base1::a<<endl;
cout<<"Base2::a="<<Base2::a<<endl;
}
};
//定义虚基类是对同一个基类只复制一次。
//从本例函数执行结果看出:
//由Derived类的创建,会导致Base1类的创建,然后是Base2的创建
//要创建Base1类必先创建他的派生类Base
//Base类创建后接着Base1创建,然后此时Base类被调用了一次
//Base1类创建结束后再创建Base2.
//因为是虚继承,Base已经被调用过一次,此时它不再调用Base类
//Base2会用在Base1创建的基础上调用的Base类的值。
//在所有的基类被依次创建后,然后再创建 最底层的派生类Derived
int main()
{
Derived obj;
return 0;
}
/*
在虚继承时的执行结果
Base a=5
Base1 a=15
Base2 a=35
Base1::a=35
Base2::a=35
*/
/*
在非虚继承时执行的结果
Base a=5
Base1 a=15
Base a=5
Base2 a=25
Base1::a=15
Base2::a=25
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: