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

上一篇: C++聚合 下一篇: C++重載