日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++虚函数与多态性

發布時間:2025/3/15 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++虚函数与多态性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++虛函數與多態性

開發工具與關鍵技術:C++、VisualStudio 作者:何任賢 撰寫時間:2019年06月01日

多態性(Polymorphism)是指一個名字,多種語義;或界面相同,多種實現,而重載函數是多態性的一種簡單形式。
虛函數允許函數調用與函數體的聯系在運行時才進行,稱為動態聯編,而聯編是指一個程序模塊、代碼之間互相關聯的過程,而靜態聯編,是程序的匹配、連接在編譯階段實現,也稱為早期匹配,而重載函數就是靜態聯編的例子,而動態聯編是指程序聯編推遲到運行時進行,所以又稱為晚期聯編,而switch 語句和 if 語句是動態聯編的例子。
在一個類說明中重載,基類的成員函數在派生類重載。
有 3 種編譯區分方法:
第一種就是根據參數特征進行區分,例如:tast(int,char)和tast(bool,int)不是同一個函數,編譯器可以進行區分。
第二種則是利用“::”作用域運算符進行區分,例如:A::tast()和B::tast()這兩個也不是同一個函數,雖然它們有可能是同樣的原型和同樣的定義,但是編譯器編譯時會把它們區分開來。
第三種則是根據類對象進行區分,例如:我聲明兩個類對象為A a和B b,我通過點運算符來調用函數tast(),a.tast()和b.tast()編譯器也會區分開來,編譯器會去類A找a.tast(),去類B找b.tast(),而不會報重定義錯誤。
被關鍵字virtual 修飾的成員函數稱為虛函數,在實現運行時多態的關鍵首先是要說明虛函數,另外,必須用基類指針調用派生類的不同實現版本。
虛函數的重載特性:在派生類中重載基類的虛函數要求函數名、返回類型、參數個數、參數類型和順序完全相同。
如果僅僅返回類型不同,C++認為是錯誤重載,如果函數原型不同,僅函數名相同,丟失虛特性。
下面是例子:
#include
using namespace std;
class A
{
public:
virtual void tast() { cout << “A” << endl; }
};
class B:public A
{
public:
void tast() { cout << “B” << endl; }
};
class C :public B
{
public:
void tast() { cout << “C” << endl; }
};
void main()
{
A *a; B b; C c;
a = &b;
a->tast();
a = &c;
a->tast();
}

這是使用的虛函數的結果,我們可以通過基類指針指向不同的派生類對象來調用派生類的函數,從而達到多態性,其中虛函數可以沒有多態性,但是多態性肯定有虛函數。如果不使用virtual修飾tast()函數,我們就不可以通過基類指針指向派生類對象來調用派生類的tast()函數。下面沒有使用virtual修飾的結果。


這就是沒有被virtual修飾的結果,那么從上面的代碼和結果我們可以肯定的是虛特性具有傳遞性。
虛函數和多態性使成員函數根據調用對象的類型產生不同的動作,多態性特別適合于實現分層結構的軟件系統,便于對問題抽象時,定義共性,實現定義區別。
簡單來說多態性就讓基類和派生類中的成員函數在有一定共性,但定義有不相同時,我們就需要多態性,例如:當基類中的成員函數是求多邊形周長,派生類則是求三角形周長或求其他形狀周長時,求周長就是它們的共性,而它們求周長的公式都不相同,這就是它們的不同定義。

總結

以上是生活随笔為你收集整理的C++虚函数与多态性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。