C++ 多重繼承


  大多數應用程序使用單個基類的公用繼承,但是在某些情況下,單繼承是不夠的,必須使用多繼承,當然多繼承也會帶來很多的麻煩,下面列出了多繼承的一些要點和注意事項。

  1.基類的構造函數與按照派生類列表中出現的次序調用,析構函數的調用次序總是和構造函數的調用次序相反。

  2.多重繼承的情況下,遇到二義性的可能將會更大,編譯器不會試圖根據派生類轉換區別基類間的轉換,轉換成每個基類都一樣好,有如下代碼:

class ZooAnimal
{

};

class Bear : public ZooAnimal
{

};

class Endangered
{

};

class Panda : public Bear, public Endangered
{

};

如果有print函數的兩個重載版本:

void print(const Bear&);

void print(const Endangered&);

這個調用將會出錯,編譯器將指出改掉用有二義性。

  3.假定在類的多個基類中定義了相同的成員,將會導致二義性,如果定義了同名的成員函數,即使是函數參數不同,也會導致二義性,代碼如下:

class ZooAnimal
{

};

class Bear : public ZooAnimal
{
public:
void print(int x){cout<<"print"<<endl;}

};

class Endangered
{
public:
void print(){cout<<"print"<<endl;};
};

class Panda : public Bear, public Endangered
{
};

如果在ZooAnimal中定義了print 而Bear中沒有定義,同樣會出現二義性。避免二義性的最好方法就是指定函數的作用域,比如:

Bear::print(x);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM