多型的點滴

2021-07-02 23:43:10 字數 1761 閱讀 5307

多型指不同物件接收到相同訊息時,根據物件類得不同而產生不同的動作,具體的說,多型就是同乙個函式名稱,作用在不同的物件上將產生不同的操作,簡單的說,多型就是「乙個介面,多種實現」。多型性分為靜態多型性和動態多型性,繼承的過載體現了靜態多型性,而虛函式用來實現動態多型性,虛函式指的是在某基類中宣告為virtual 並在乙個或多個派生類中被重新定義的成員函式。

靜態多型性體現在函式過載,表現為兩種情況:

<1>是引數個數或型別有所差別的過載

<2>是函式的引數完全相同但屬於不同的類(繼承關係)

#include using namespace std;

class base

void show()

private:

int a;

int b;

};class base1:public base

void show()

結果如下:

base   a=3  b=4

base1  c=3

base  a=3  b=4

base  a=1  b=2

從上述結果看出,指標指向基類和派生類物件時都是呼叫呼叫基類物件的函式,而不是派生類物件的函式,原本想通過指標來達到動態呼叫,即當指標指向不同的物件時執行不同的操作目的。為了解決這個問題,就要引入虛函式,介紹虛函式之前,先簡單說明派生類物件指標使用時應注意的問題:

<1>基類物件的指標可以指向公有派生類的物件,但不允許指向它的私有派生類的物件

<2>基類物件的指標可以指向公有派生類的物件,派生類指標不允許指向基類物件

<3>基類物件的指標指向公有派生類的物件,只能直接訪問派生類中從基類繼承下來的成員,不能直接訪問派生類中定義的成員,若想訪問可以顯示型別轉換方式。

虛函式定義的形式為:

virtual  《函式型別》《函式名》 (參數列)

將上述例子進行修改

#include using namespace std;

class base

virtual void show()

private:

int a;

int b;

};class base1:public base

void show()

結果如下:

base   a=3  b=4

base1  c=3

base  a=3  b=4

base1  c=3

使用虛函式注意事項:

<1>在派生類中定義的虛函式返回值、引數要跟基本一模一樣

<2>虛函式的宣告只能出現在類函式原型的宣告中,不能出現在定義中且基類中只有保護成員或公有成員才能被宣告為虛函式

<3>派生類中的虛函式關鍵字virtual可以寫,也可以不寫

下面介紹抽象類,它是一種特殊的類,抽象類是帶有純虛函式(未實現的虛函式)的類。純虛函式的作用是為派生類提供乙個一致的介面,一般來說,乙個抽象類至少有乙個純虛函式。它要求各派生類在重新定義時根據自己的要求定義實際的操作內容。

純虛函式定義為:virtual 《函式型別》《函式名》 (參數列) =0;

使用抽象類注意事項:

<1>抽象類只能用做其他類的基類,不能建立抽象類的物件(因為純虛函式未定義功能)

<2>抽象類不能用作引數型別、函式的返回型別或顯示轉換的型別

<3>可以宣告抽象類得指標和引用,通過它們可以訪問派生類成員

<4>若抽象類的派生類中沒有給出所有純虛函式的函式體,派生類還是乙個抽象類,否則不是抽象類,可以宣告自己的物件

C 多型知識點滴

函式的多種不同的實現方式即為多型 在繼承中,有時候基類的一些函式在派生類中也是有用的,但是功能不夠全或者兩者的功能實現方式就是不一樣的,這個時候就希望過載那個基類的函式,但是為了不再呼叫這個函式時,出現不知道呼叫基類的還是子類的情況出現,於是就提出了多型。多型可以說是面象物件語言的強大原因之一。多型...

多型之點點滴滴。

1.巨集觀 實現一套邏輯多種具體適配的執行結果。2.微觀 一套 在執行時,根據實際物件的不同來動態繫結 跳轉執行相匹配的具體函式。3.函式宣告前加virtual是虛函式。4.虛函式是c 實現多型的基礎,多型特性的基類方法必須是虛函式。5.override重寫 覆蓋 和redefine重定義 隱藏 微...

雨傘的點滴。。。

其實,在我看來,許多在我們人眼看來,是再微不足道,再不起眼的小事物,其實,它們賦予著很偉大的使命的!這裡,就拿很普通的雨傘來小講段吧 西西。雨傘,乙個好平凡的字眼哦,可是,我覺得,在我們的日常生活中,它是很偉大的。天無情地下起了雨,請問,你想到的是什麼?一把小小的雨傘?呵呵。沒有了它,你便無疑地會成...