C++学习之继承与派生(二)--------虚继承

虚继承主要是解决多继承时可能发生的对同一基类继承而产生的二义性问题。

#include<iostream>
using namespace std;
class A
{
 public:
  int m_n;
  A(int n);
  
};
A::A(int n)
{
 m_n=n;
}
class B:virtual public A
{
 private:
  int m_b;
 public:
  B(int n,int b);
  
};
B::B(int n,int b) :A(n)
{
 m_b=b;
}
class C : virtual public A
{
 private:
  int m_c;
 public:
  C(int n,int c):A(n),m_c(c){}
 };
 
 class D :  public B,public C
{
 private:
  int m_d;
 public:
  D(int n,int b,int c,int d):B(n,b),C(n,c),m_d(d),A(n){}
 };
 
 
int main()
{
 D d(1,2,3,4);
 cout<<(d.m_n)<<endl;
 return 0;
 }
使用虚继承,避免了数据成员的冗余复制,以上程序访问基类数据成员n,其实可以有以下四种方式:                                                           d.n;      d.A::n;       d.B::n;        d.C::n;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值