鍍金池/ 教程/ C++/ C++多態(tài)
C++用戶定義異常
C++ this指針
C++存儲(chǔ)類
C++函數(shù)
C++交換變量值
C++ continue語(yǔ)句
C++注釋
C++函數(shù)遞歸
C++ goto語(yǔ)句
C++函數(shù)-通過(guò)值調(diào)用和引用調(diào)用
C++重載
C++語(yǔ)言歷史
C++反轉(zhuǎn)數(shù)字
C++ try/catch語(yǔ)句
C++是什么?
C++變量
C++ break語(yǔ)句
C++運(yùn)算符
C++第一個(gè)程序
C++繼承
C++虛函數(shù)
C++將十進(jìn)制轉(zhuǎn)換為二進(jìn)制
C++矩陣乘法
C++對(duì)象和類
C++基礎(chǔ)輸入輸出(cin,cout,endl)
C++文件和流
C++求素?cái)?shù)
C++ if/else語(yǔ)句
C++友元函數(shù)
C++命名空間
C++面向?qū)ο蟾拍?/span>
C++階乘
C++關(guān)鍵字
C++重載
C++聚合
C++結(jié)構(gòu)體
C++的特點(diǎn)(特性)
C++打印字母表三角
C++ switch語(yǔ)句
C++多態(tài)
C++ do-while循環(huán)
C++字符串
C++ static關(guān)鍵字
C++錯(cuò)誤處理
C++ for循環(huán)
C語(yǔ)言與C++的區(qū)別
C++ while循環(huán)
C++開(kāi)發(fā)環(huán)境的安裝
linux環(huán)境下編譯C++ 程序
C++枚舉
C++指針
C++斐波納契數(shù)列
C++阿姆斯壯數(shù)字
C++接口
C++教程
C++數(shù)組
C++數(shù)據(jù)抽象
C++回文程序?qū)嵗?/span>
C++打印數(shù)字三角
C++將數(shù)組傳遞到函數(shù)
C++多維數(shù)組
C++將數(shù)字轉(zhuǎn)換字符

C++多態(tài)

術(shù)語(yǔ)“多態(tài)”(Polymorphism)是”poly“ + “morphs“的組合,其意味著多種形式。 這是一個(gè)希臘詞。 在面向?qū)ο缶幊讨?,我們使?code>3個(gè)主要概念:繼承,封裝和多態(tài)。

C++中有兩種類型的多態(tài):

  • 編譯時(shí)多態(tài)性:通過(guò)函數(shù)重載和操作符重載來(lái)實(shí)現(xiàn),這也稱為靜態(tài)綁定或早期綁定。
  • 運(yùn)行時(shí)多態(tài)性:它通過(guò)方法覆蓋來(lái)實(shí)現(xiàn),也稱為動(dòng)態(tài)綁定或后期綁定。

C++運(yùn)行時(shí)多態(tài)性示例

下面來(lái)看看一個(gè)簡(jiǎn)單的C++運(yùn)行時(shí)多態(tài)的例子。

#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;  
}

運(yùn)行上面代碼,得到以下結(jié)果 -

Eating bread...

C++運(yùn)行時(shí)多態(tài)性示例:通過(guò)使用兩個(gè)派生類

下面來(lái)看看看C++中的運(yùn)行時(shí)多態(tài)性的另一個(gè)例子,下面有兩個(gè)派生類。

#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();   
}

運(yùn)行上面代碼,得到以下結(jié)果 -

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

運(yùn)行時(shí)多態(tài)性與數(shù)據(jù)成員

運(yùn)行時(shí)多態(tài)性可以通過(guò)C++中的數(shù)據(jù)成員來(lái)實(shí)現(xiàn)。 下面來(lái)看看一個(gè)例子,通過(guò)引用變量訪問(wèn)字段,引用變量引用派生類的實(shí)例。

#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;   
}

運(yùn)行上面代碼,得到以下結(jié)果 -

Black

上一篇:C++接口下一篇:C++階乘