c 裡,多型和繼承有什麼關係?請舉例說明

時間 2022-01-25 21:55:38

1樓:匿名使用者

有了繼承,指向基類型別的指標或引用就可以被用來指向派生類型別的物件。然後就可以編寫程式來操縱這些指標或引用而不用考慮它們所指向的物件的實際型別。

用一個基類指標或引用來操縱多個派生型別的能力被稱為多型性。

在c++中,多型性分為兩種,一種稱為編譯時多型,另一種為執行時多型分別解釋下:

1.編譯時多型,也就是函式過載,所謂函式過載是指同一個函式名可以對應著多個函式的實現,具體呼叫哪個按照由引數個數,引數型別等來決定,這個簡單,就不說了

2.執行時多型,就是虛擬函式。 在定義了虛擬函式後,可以在基類的派生類中對虛擬函式重新定義,以實現你所想要的功能。

比如:class a

void display()

};class b : public a

void display(a& a)

};那麼

a* a = new a();

a->test();呼叫的是基類的

a* b = new b();

b->test();呼叫的是派生類的。

如果在a中不申明virtual,

那麼a* b = new b();

b->test(); 會呼叫基類的

c++中 繼承與多型區別

2樓:匿名使用者

繼承是指,子類可以自動獲得父類提供的函式,如父類提供了foo函式回,則子類也會有foo函式

多型是指

答,子類可以重寫父類的某個函式,從而為這個函式提供不同於父類的行為。一個父類的多個子類可以為同一個函式提供不同的實現,從而在父類這個公共的介面下,表現出多種行為

當然,以上的自動獲得和重寫,還存在一個訪問級別的概念。比如public的函式或者protected的函式才能被重寫這類的限制。

3樓:許詩文

繼承:是指子類按照一定方式繼承基類的成員及函式。

如果此時定義一個基類的指標,並把子類的物件傳給這個基類指標.假如子類和基類都有一個相同函式。那麼這個指標呼叫這個函式則到底呼叫的是基類的函式還是子類的函式呢?

答案是:基類的函式。因為函式的呼叫取決於基類的指標型別,而不是取決於指標指向的物件型別。

如下:class shape

class crect:public shape

shape* pshape;

crect rct;

pshape=&rct; //指向子類物件,最好不要用一個子類指標指向一個基類物件,因為這樣危險性大.

pshape->display(); //它呼叫的仍然是基類的shape的display函式即畫一個多邊形以上的這種特性就是函式的一般性,即指標呼叫的函式取決於指標型別,而不取決於指向的物件型別。假如這個基類派生了很多子類,且每個子類都定義了個函式對基類的函式進行覆蓋,此時多個基類指標指向不同子類物件,呼叫子類的覆蓋函式,則這些指標的行為都是一樣的,即都是呼叫基類的函式而不是子類相對應的函式。

從上可以看出,這種特性並不具有多型性,因為它不會自動隨著指向的物件而呼叫物件的函式。那麼如何能實現這種特性呢?這時就需要一種技術,即虛擬函式。虛擬函式是實現多型性的方法。

虛擬函式就是在函式的前面加上一個virtual即可。

虛擬函式中有一種比較特別:純虛擬函式。

它的目的:純虛擬函式不能定義函式的實際動作,它的存在只是為了在衍生類別中對它能夠進行重新定義,實現實態特性.

它的定義方式: virtual 函式型別 函式名(引數)= 0; //一定要「= 0」

它的約束:如果一個類中有純虛擬函式,則這個類叫做抽象類,它是不能定義物件的。

c++多型性是什麼,有什麼作用

4樓:

多型,指的是程式函式介面(形參、實參)支援不同的資料型別,這樣用一個函式名可以用不同型別的實參去呼叫。省去為不同型別的資料反覆寫相同功能的函式。

5樓:

簡單地說就是子類裡實現了父類的虛擬函式,父類的指標不僅可以呼叫自己的這個函式,同時也可以呼叫子類的這個虛擬函式,從而實現了多型。作用就是實現了動態聯編,使程式執行效率更高,更容易維護和操作。

6樓:匿名使用者

多型性簡單來說就是,你向不同的物件發出同一個命令,不同的物件會有不同的響應。

2,j**a中的繼承和多型的書寫格式與c++有何不同

c++多重繼承與多型的區別

7樓:匿名使用者

根本沒有聯絡

弄不懂也沒必要糾結,這種術語本身就沒幾個人能理清楚,以後用多了就明白了

繼承時的多型:目測給出下面**的執行輸出結果,並簡單解釋每一行輸出的原因

8樓:陳亮

a new vehicle //建立vehicle v=new vehicle() 時執行vehicle的構造方法輸出

a new vehicle

a new car //執行vehicle vc=new car()時,因為car類繼承了vehicle類,執行car類的構造方法時首先呼叫vehicle類的構造方法,所以先輸出:a new vehicle 然後輸出 :a new car

a new vehicle

a new bus //建立bus vb物件時,因為bus類繼承了vehicle類,執行bus類的構造方法時首先呼叫vehicle類的構造方法,所以先輸出:a new vehicle 然後輸出 :a new car

vehicle is driver //呼叫 vehicle類的 driver()方法輸出

car is driver //執行vc.driver()輸出,因為car類重寫了vehicle類的driver方法

bus is driver //執行vb.driver()輸出,因為bus類重寫了vehicle類的driver方法

vehicle is brake //雖然car類繼承自vehicle類,但是由於brake()方法是靜態的,所以不會被重寫,所以vc.brake()呼叫的是vehicle類的brake()方法

vehicle is brake //執行vb.brake()輸出,繼承自vehicle類的brake方法

什麼叫做類的繼承和多型,有什麼好處?

9樓:那份已逝去的愛

繼承就是子類繼承父類,使子類具有父類的各種屬性和方法,好處就是避免多餘的**出現,例如,專案中常常要用到的資料庫的開啟關閉,就可以單獨寫一個父類,其他類要用的話可以去繼承。。。

多型就是一個介面,使用不同的例項去執行不同的操作,好處就是增強程式的可擴充套件性及可維護性,使**更簡潔

10樓:亮亮和雪雪

類就是一類事物,繼承就是extends,父與子得關係,多型是核心,就是在你的動物類中,你傳遞的引數可能是狗,可能是貓,傳狗狗叫,傳貓貓叫,這就是多型,父類引用指向子類物件,有繼承,又方法的重寫,呼叫該方法的時候是呼叫的子類重寫後的方法而不是父類的方法,也叫動態繫結

11樓:匿名使用者

繼承和多型可以對**更好的複用與擴充套件

CCC都有什麼關係怎麼區別,c 和c 有什麼區別?

c是基礎.必須要好好學,而且要學精通.c 是基於c的,學完c在學習它.c 封裝了很多函式介面,用起來最方便,但原理上的東西很少.所以,建議你學習c和c 至於c 要是用到了,你再看,因為比較簡單.加油哦 c家族裡c 是基礎 c是原始語言,總體上來說它很重要 csharp嘛就只是微軟封裝了一些函式介面,...

心和大腦有什麼關係,意識和大腦是什麼關係

萬劫 玄若法師答 阿彌陀佛,關於真心與妄心的關係,比較難懂,也比較複雜,如果談玄說妙的來解釋,弄得似懂非懂,也沒啥意思,所以,我就講的簡單點,直白點,當然,這必然會離原 有一定的差距,所以,真正想要弄明白,還要請您有空研究一下原 一個病危的人,他在生命即將結束之前,回憶起自己這一世的種種,或喜或悲,...

粘性與溫度有什麼關係,粘度和粘性有什麼關係?

情定亞平寧 粘度 粘度 viscosity 度量流體粘性大小的物理量。又稱粘性係數 動力粘度,記為 牛頓粘性定律指出,在純剪下流動中相鄰兩流體層之間的剪應力 或粘性摩擦應力 為式中dv dy為垂直流動方向的法向速度梯度。粘度數值上等於單位速度梯度下流體所受的剪應力。速度梯度也表示流體運動中的角變形率...