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

C++基础知识(二)

2005-01-09 11:41 573 查看
       如果要想使公共基类在派生类中只产生一个基类子对象,则必须将这个基类设定为虚基类。

  虚基类的引入和说明

  前面简单地介绍了要引进虚基类的原因。实际上,引进虚基类的真正目的是为了解决二义性问题。

  虚基类说明格式如下

   virtual <继承方式><基类名>

  其中,virtual是虚类的关键字。虚基类的说明是用在定义派生类时,写在派生类名的后面。

#include "stdafx.h"

#include <iostream.h>

class A

{

   public:

 class B

 {

 public:

  B(int xx)

  {

   this->x=xx;

  }

  void f1();

 private:

  int x;

 };

 void f();

 A(int a):a(a){

  cout<<a<<endl;}

 void print(){cout<<this->a<<endl;}

 private:

  int a;

};

void A::B::f1()

{

 cout<<"B类的私有变量:"<<this->x<<endl;

}

void A::f()

{

 cout<<"A类的私有变量:"<<this->a<<endl;

}

class C:public A

{

public:

 C(int a,int c):A(a){this->c=c;}

 void print();

private:

 int c;

};

void C::print()

{  

 A::print();

 cout<<this->c<<endl;

}

class D:public A

{

public:

 D(int a,int d):A(a){this->d=d;}

    void print(){

  A::print();

  cout<<this->d<<endl;}

private:

 int d;

};

class E:public C,public D

{

public:

 E(int a,int b,int c,int d,int e):C(a,b),D(c,d),e(e){}

 void print();

private:

 int e;

};

void E::print()

{

 C::print();

 D::print();

 cout<<this->e<<endl;

}

class A1:virtual public A//虚基类

{

public:

 A1(int a,int a1):A(a),a1(a1)

 {

  cout<<this->a1<<endl;

 } 

private:

 int a1;

};

class A2:virtual public A

{

public:

 A2(int a,int a2):A(a),a2(a2)

 {

  cout<<this->a2<<endl;

 }

private:

 int a2;

};

class AA:public A1,public A2

{

public:

 AA(int a,int a1,int a2,int aa):A1(a,a1),A2(a,a2),A(a)

 {

   cout<<aa<<endl;

 }

};

void main(void)

{

 printf("嵌套类示例:\n");

 A b1(4);

 b1.f();

 A::B b2(5);

 b2.f1();

 printf("解决二义性问题:\n");

 E e1(1,2,3,4,5);

 e1.print();

 printf("利用虚基类解决二义性问题:\n");

 AA AA1(1,2,3,4);

 //AA1.print();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: