亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C++多繼承

2019-11-17 05:06:54
字體:
來源:轉載
供稿:網友

  多繼續可以看作是單繼續的擴展。所謂多繼續是指派生類具有多個基類,派生類與每個基類之間的關系仍可看作是一個單繼續。

  多繼續下派生類的定義格式如下:

  class <派生類名>:<繼續方式1><基類名1>,<繼續方式2><基類名2>,…
   {
    <派生類類體>
   };

  其中,<繼續方式1>,<繼續方式2>,…是三種繼續方式:public、PRivate、protected之一。例如:

class A
{

};
class B
{

};
class C : public A, public, B
{

};

其中,派生類C具有兩個基類(類A和類B),因此,類C是多繼續的。按照繼續的規定,派生類C的成員包含了基類B中成員以及該類本身的成員。

  多繼續的構造函數

  在多繼續的情況下,派生類的構造函數格式如下:

  <派生類名>(<總參數表>):<基類名1>(<參數表1>),<基類名2>(<參數表2>),…
   <子對象名>(<參數表n+1>),…
    {
     <派生類構造函數體>
    }

  其中,<總參數表>中各個參數包含了其后的各個分參數表。

  多繼續下派生類的構造函數與單繼續下派生類構造函數相似,它必須同時負責該派生類所有基類構造函數的調用。同時,派生類的參數個數必須包含完成所有基類初始化所需的參數個數。

  派生類構造函數執行順序是先執行所胡基類的構造函數,再執行派生類本身構造函數,處于同一層次的各基類構造函數的執行順序取決于定義派生類時所指定的各基類順序,與派生類構造函數中所定義的成員初始化列表的各項順序無關。也就是說,執行基類構造函數的順序取決于定義派生類時基類的順序??梢姡缮悩嬙旌瘮档某蓡T初始化列表中各項順序可以任意地排列。
 
  下面通過一個例子來說明派生類構造函數的構成及其執行順序。

#include
class B1
{
public:
B1(int i)
{
b1 = i;
cout<<"構造函數 B1."< }
void print() { cout< private:
int b1;
};

class B2
{
public:
B2(int i)
{
b2 = i;
cout<<"構造函數 B2."< }
void print() { cout< private:
int b2;
};

class B3
{
public:
B3(int i)
{
b3 = i;
cout<<"構造函數 B3."< }
int getb3() { return b3; }
private:
int b3;
};
class A : public B2, public B1
{
public:
A(int i, int j, int k, int l):B1(i), B2(j), bb(k)
{
a = l;
cout<<"構造函數 A."< }
void print()
{
B1::print();
B2::print();
cout< }
private:
int a;
B3 bb;
};

void main()
{
A aa(1, 2, 3, 4);
aa.print();
}

  該程序的輸出結果為:

   構造函數 B2.2

   構造函數 B1.1

   構造函數 B3.3

   構造函數 A.4

   1

   2

   4, 3

  在該程序中,作用域運算符::用于解決作用域沖突的問題。在派生類A中的print()函數的定義中,使用了B1::print;和B2::print();語句分別指明調用哪一個類中的print()函數,這種用法應該學會。

  二義性問題

  一般說來,在派生類中對基類成員的訪問應該是唯一的,但是,由于多繼續情況下,可能造成對基類中某成員的訪問出現了不唯一的情況,則稱為對基類成員訪問的二義性問題。

  實際上,在上例已經出現過這一問題,回憶一下上例中,派生類A的兩基類B1和B2中都有一個成員函數print()。假如在派生類中訪問print()函數,到底是哪一個基類的呢?于是出現了二義性。但是在上例中解決了這個問題,其辦法是通過作用域運算符::進行了限定。假如不加以限定,則會出現二義性問題。

  下面再舉一個簡單的例子,對二義性問題進行深入討論。例如:

class A
{
public:
void f();
};

class B
{
public:
void f();
void g();
};

class C : public A, public B
{
public:
void g();
void h();
};

  假如定義一個類C的對象c1:

   C c1;

  則對函數f()的訪問

   c1.f();

  便具有二義性:是訪問類A中的f(),還是訪問類B中的f()呢?

  解決的方法可用前面用過的成員名限定法來消除二義性,例如:

   c1.A::f();

  或者

   c1.B::f();


  但是,最好的解決辦法是在類C中定義一個同名成員f(),類C中的f()再根據需要來決定調用A::f(),還是B::f(),還是兩者皆有,這樣,c1.f()將調用C::f()。

  同樣地,類C中成員函數調用f()也會出現二義性問題。例如:

  viod C::h()
   {
    f();
   }

  這里有二義性問題,該函數應修改為:

   void C::h()
   {
    A::f();
   }

  或者

   void C::h()
   {
    B::f();
   }

  或者

   void C::f()
   {
    A::f();
    B::f();
   }

  另外,在前例中,類B中有一個成員函數g(),類C中也有一個成員函數g()。這時,

   c1.g();

  不存在二義性,它是指C::g(),而不是指B::g()。因為這兩個g()函數,一個出現在基類B,一個出現在派生類C,規定派生類的成員將支配基類中的同名成員。因此,上例中類C中的g()支配類B中的g(),不存在二義性,可選擇支配者的那個名字。

  當一個派生類從多個基類派生類,而這些基類又有一個共同的基類,則對該基類中說明的成員進行訪問時,也可能會出現二義性。例如:

class A
{
public:
int a;
};
class B1 : public A
{
private:
int b1;
};
class B2 : public A
{
private:
int b2;
};
class C : public B1, public B2
{
public:
int f();
private:
int c;
};

  已知:C c1;

  下面的兩個訪問都有二義性:

  c1.a;
  c1.A::a;

  而下面的兩個訪問是正確的:

  c1.B1::a;
  c1.B2::a;

  類C的成員函數f()用如下定義可以消除二義性:

  int C::f()
   {
    retrun B1::a + B2::a;
   }

  由于二義性的原因,一個類不可以從同一個類中直接繼續一次以上,例如:

  class A : public B, public B
   {
    …
   }

  這是錯誤的。




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久国产综合久久91精品网站| 午夜精品福利在线观看| 精品日本美女福利在线观看| 国产精品草莓在线免费观看| 欧美性生交xxxxxdddd| 性亚洲最疯狂xxxx高清| 欧美性猛交xxxxx免费看| 日本精品久久久久影院| 精品视频中文字幕| 国产精品视频白浆免费视频| 国产日韩欧美电影在线观看| 91中文精品字幕在线视频| 欧美日韩在线观看视频| 欧美一级高清免费| 成人在线视频网| 97视频国产在线| 国产精品久久久久久久一区探花| 国产亚洲欧美日韩美女| 国产精品成人国产乱一区| 成人h视频在线| 国产欧美日韩高清| 久久久999精品视频| 亚洲天堂av在线免费观看| 97av在线视频免费播放| 久久久久久久久久久久久久久久久久av| 91在线视频免费| www.99久久热国产日韩欧美.com| 欧洲成人在线视频| 亚洲欧美综合另类中字| 日韩电影中文字幕在线| 狠狠做深爱婷婷久久综合一区| 欧美激情中文字幕在线| 福利一区视频在线观看| 日韩高清人体午夜| 日韩美女视频免费看| 亚洲日本欧美日韩高观看| 国产日韩欧美日韩| 国产91在线播放| 中文字幕日韩欧美在线| 日韩最新中文字幕电影免费看| 社区色欧美激情 | 色综合久久精品亚洲国产| 国产精品久久久久9999| 欧美日韩国产综合视频在线观看中文| 欧美多人乱p欧美4p久久| 正在播放欧美一区| 日韩av在线不卡| 欧美综合第一页| 亚洲区中文字幕| 亚洲国产精品人久久电影| 一区二区成人精品| 欧美国产乱视频| 日韩免费在线看| 亚洲欧美日韩国产中文| 国产精品久久一区| 欧美大片免费观看| 亚洲精选一区二区| 亚洲一级免费视频| 国产精品美女av| 亚洲无限av看| 国产精品精品久久久| 成人写真福利网| 国产九九精品视频| 懂色aⅴ精品一区二区三区蜜月| 精品国产乱码久久久久久虫虫漫画| 欧美黑人一区二区三区| 91日本视频在线| 国产精品1234| 亚洲男人第一av网站| 久久久精品国产一区二区| wwwwwwww亚洲| 亚洲欧美日韩爽爽影院| 国产日产欧美精品| 怡红院精品视频| 精品网站999www| 欧美激情中文字幕乱码免费| 日韩精品999| 97在线观看免费高清| 亚洲人成五月天| 91精品国产高清| 国产在线播放不卡| 日韩a**站在线观看| 91av在线免费观看| 国产精品久久久久久久久久久久久| 国产精品无码专区在线观看| 国内精品久久久久影院优| 久久这里只有精品视频首页| 成人黄色免费在线观看| 日韩亚洲精品视频| 国产成人aa精品一区在线播放| 欧美高跟鞋交xxxxxhd| 久久久久久美女| 日韩精品中文字幕在线播放| 蜜臀久久99精品久久久久久宅男| 7m精品福利视频导航| 国产精品一区二区电影| 国产精品久久久久久久久久久新郎| 国产成人a亚洲精品| 精品国偷自产在线视频| 亚洲天堂av网| 91av在线精品| 亚洲美女av在线| 精品国产老师黑色丝袜高跟鞋| 98精品国产自产在线观看| 国产精品视频网| 国产成人精品免费视频| 欧美大片在线免费观看| 奇米四色中文综合久久| 91精品国产乱码久久久久久久久| 久久久久久久久久亚洲| 欧洲精品久久久| 亚洲日韩第一页| 精品久久久国产精品999| 国产精品都在这里| 欧美亚洲另类激情另类| 在线播放日韩av| 国产又爽又黄的激情精品视频| 日本高清不卡在线| 国产一区二区三区日韩欧美| 欧美日韩综合视频| 亚洲视频在线免费观看| 亚洲最大的成人网| 欧美黄色三级网站| 日韩av电影中文字幕| 78m国产成人精品视频| 亚洲精品成人网| 97色在线播放视频| 欧美激情免费在线| 国产精品a久久久久久| 日韩av在线看| 78色国产精品| 精品亚洲一区二区三区在线观看| 一区二区三区四区在线观看视频| 国产在线高清精品| 欧美xxxx做受欧美.88| 俺去啦;欧美日韩| 国产精品一区二区三区免费视频| 国产视频精品在线| 成人黄色在线播放| 国产精品久久久久久久久久尿| 午夜精品美女自拍福到在线| 欧美大奶子在线| 91在线观看免费高清完整版在线观看| 国产精品青草久久久久福利99| 国产精品一久久香蕉国产线看观看| 日韩第一页在线| 欧美日韩爱爱视频| 国产精品精品视频一区二区三区| 国产精品久久久av| 欧美成人精品在线观看| 亚洲第一av网站| 高清日韩电视剧大全免费播放在线观看| 亚洲成人网在线观看| 成人免费大片黄在线播放| 日韩av在线高清| 美女啪啪无遮挡免费久久网站| 国产第一区电影| 国产精品久久久久久av下载红粉| 国产91精品久久久久久久| 亚洲成人久久一区| 欧美俄罗斯性视频| 影音先锋欧美在线资源| 亚洲少妇激情视频| 欧美性猛交xxxxx水多|