C++基礎知識(二)

來源:互聯網
上載者:User

       如果要想使公用基類在衍生類別中只產生一個基類子物件,則必須將這個基類設定為虛基類。

  虛基類的引入和說明

  前面簡單地介紹了要引進虛基類的原因。實際上,引進虛基類的真正目的是為瞭解決二義性問題。

  虛基類說明格式如下

   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();

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.