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