99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

教你學(xué)習(xí)c++多態(tài)與虛函數(shù)

發(fā)布時(shí)間:2016-07-08 15:45  回復(fù):0  查看:2823   最后回復(fù):2016-07-08 15:45  
多態(tài)與虛函數(shù)是 c++學(xué)習(xí)中必學(xué)的內(nèi)容。這里用實(shí)例幫助大家簡單的理解 c++多態(tài)與虛函數(shù)。
什么是多態(tài)?
函數(shù)的形參中定義基類的情況,當(dāng)然,這里的基類不一定是爺爺類,父親類也可以,當(dāng)實(shí)際調(diào)用時(shí)傳遞的如果是子類,那么,運(yùn)行時(shí)會(huì)檢查要調(diào)用的類的方法在基類(因?yàn)樾螀⑹腔?,所以要參考基類)中是? virtual 的,如果不是 virtual 的,則直接執(zhí)行基類中的定義(即使當(dāng)前確實(shí)是子類的實(shí)例,也不會(huì)執(zhí)行子類的該方法,換言之,就是不允許覆蓋,這就是 virtual 存在的意義,某些語言是直接覆蓋的,沒法選擇不覆蓋),如果是 virtual 的,則根據(jù)繼承鏈向下檢查,直到查到該方法的最后一個(gè)實(shí)現(xiàn),哪怕繼承鏈中的某些子類沒有明確寫 virtual 關(guān)鍵字也沒關(guān)系(換言之, virtual 屬性是自動(dòng)、強(qiáng)制繼承的);具體實(shí)現(xiàn)上可能不是一個(gè)一個(gè)查,但至少邏輯上是這樣
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include<string>
#include<iostream>
using namespace std;
class animal{
public:
virtual void say()=0;
virtual void run() {
cout << "running" <<endl;
}
};
class dog:public animal{
public:
void say() {
cout<<"wang wang ..."<<endl;
}
virtual void run() {
cout << "dog running" <<endl;
}
};
class jinmao:public dog{
public:
void say() {
cout << "I am jinmao, wang wang ..." <<endl;
}
void run() {
cout << "jinmao running" <<endl;
}
};
void say(animal *a){
a->say();
}
void run(animal *a){
a->run();
}
void dog_run(dog *d){
d->run();
}
int main(){
say(new dog());
say(new jinmao());
run(new dog());
run(new jinmao());
dog_run(new jinmao());
return 0;
}
多態(tài)玩的就是虛
虛函數(shù)
就是允許覆蓋,多態(tài)的實(shí)現(xiàn)方式
純虛函數(shù)
就是沒有函數(shù)的定義,只有聲明,子類想不覆蓋都不行,除非子類自己不創(chuàng)建對(duì)象,期待孫類的繼承;
語法上來講,函數(shù)不定義是不行的,但是純虛函數(shù)就是不定義,所以必須明確說明不定義,即:  =0  ,如下: (沒有 =0  是不行的)
file:///C:\Users\wlc\AppData\Local\Temp\ksohtml\wps7D06.tmp.png
1
virtual void say()=0;
抽象類與接口
c++ 中沒有抽象類,也沒有接口,更沒有 abstract 、 interface 、 implements 等關(guān)鍵字,有的只有 class virtual
如果一個(gè)類中包含了純虛函數(shù),則該類自然為抽象類;
如果一個(gè)類中只包含純虛函數(shù),則該類相當(dāng)于接口;
原文來自: phpor.net
您還未登錄,請先登錄

熱門帖子

最新帖子

?