C++多型


術語「多型」(Polymorphism)是」poly「 + 「morphs「的組合,其意味著多種形式。 這是一個希臘詞。 在物件導向程式設計中,我們使用3個主要概念:繼承,封裝和多型。

C++中有兩種型別的多型:

  • 編譯時多型性:通過函式過載和操作符過載來實現,這也稱為靜態系結或早期系結。
  • 執行時多型性:它通過方法覆蓋來實現,也稱為動態系結或後期系結。

C++執行時多型性範例

下面來看看一個簡單的C++執行時多型的例子。

#include <iostream>  
using namespace std;  
class Animal {  
    public:  
void eat(){    
cout<<"Eating...";    
    }      
};   
class Dog: public Animal    
{    
 public:  
 void eat()    
    {    
       cout<<"Eating bread...";    
    }    
};  
int main(void) {  
   Dog d = Dog();    
   d.eat();  
   return 0;  
}

執行上面程式碼,得到以下結果 -

Eating bread...

C++執行時多型性範例:通過使用兩個派生類

下面來看看看C++中的執行時多型性的另一個例子,下面有兩個派生類。

#include <iostream>  
using namespace std;  
class Shape {  
    public:  
virtual void draw(){    
cout<<"drawing..."<<endl;    
    }      
};   
class Rectangle: public Shape    
{    
 public:  
 void draw()    
    {    
       cout<<"drawing rectangle..."<<endl;    
    }    
};  
class Circle: public Shape    
{    
 public:  
 void draw()    
    {    
       cout<<"drawing circle..."<<endl;    
    }    
};  
int main(void) {  
    Shape *s;  
    Shape sh;  
        Rectangle rec;  
        Circle cir;  
        s=&sh;  
     s->draw();   
        s=&rec;  
     s->draw();    
    s=○  
     s->draw();   
}

執行上面程式碼,得到以下結果 -

drawing...
drawing rectangle...
drawing circle...

執行時多型性與資料成員

執行時多型性可以通過C++中的資料成員來實現。 下面來看看一個例子,通過參照變數存取欄位,參照變數參照派生類的範例。

#include <iostream>  
using namespace std;  
class Animal {  
    public:  
    string color = "Black";    
};   
class Dog: public Animal   
{    
 public:  
    string color = "Grey";    
};  
int main(void) {  
     Animal d= Dog();    
    cout<<d.color;   
}

執行上面程式碼,得到以下結果 -

Black