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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++中的两种绑定方式(静态绑定、动态绑定)

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中的两种绑定方式(静态绑定、动态绑定) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩種綁定方式

靜態綁定:在編譯時刻,根據指針或引用變量的靜態類型來決定成員函數屬于哪一個類。

動態綁定:在運行時刻,根據指針或引用變量實際指向或引用的對象類型(動態類型)來確定成員函數屬于哪一個類。

需要注意:

  1. C++默認的綁定方式是靜態綁定。示例如下:
#include<iostream> 
using namespace std;class bird{public:void fly(){cout<<"bird fly"<<endl;};//鳥會飛void walk(){cout<<"bird walk"<<endl;}//鳥會走
};class penguin: public bird{public:void swim();//企鵝會游泳void fly(){cout<<"penguin can not fly"<<endl;}void walk(){cout<<"penguin walk"<<endl;}
};void func1(bird&bd){bd.fly();
}
void func2(bird*pb){pb->fly();
}int main(){bird bd;penguin pg;bd.fly();//bird::fly()func1(bd);//bird::fly()func2(&bd);//bird::fly()pg.fly();//penguin::fly()func1(pg);//bird::fly()func2(&pg);//bird::fly()return 0;
}
  1. 必須在程序中顯式地指出動態綁定。

動態綁定的實現

動態綁定的實現條件:

  1. 類的定義中成員函數聲明為虛函數
  2. 通過引用或指針來訪問對象的虛函數

virtual聲明需要注意:

  1. 一旦在基類中指定某成員函數為虛函數,那么,不管在派生類中是否給出virtual聲明,派生類(以及派生類的派生類,…)中對其重定義的成員函數均為虛函數
  2. 重定義: 對派生類中定義的成員函數, 其函數名, 參數個數和類型以及返回值類型與基類的某個虛成員函數相同(override)

動態綁定示例:

#include<iostream> 
using namespace std;class bird{public:virtual void fly(){cout<<"bird fly"<<endl;};//鳥會飛void walk(){cout<<"bird walk"<<endl;}//鳥會走
};class penguin: public bird{public:void swim();//企鵝會游泳void fly(){cout<<"penguin can not fly"<<endl;}void walk(){cout<<"penguin walk"<<endl;}
};void func1(bird&bd){bd.fly();
}
void func2(bird*pb){pb->fly();
}int main(){bird bd;penguin pg;bd.fly();//bird::fly()func1(bd);//bird::fly()func2(&bd);//bird::fly()pg.fly();//penguin::fly()func1(pg);//penguin::fly()func2(&pg);//penguin::fly()getchar();return 0;
}

總結

以上是生活随笔為你收集整理的C++中的两种绑定方式(静态绑定、动态绑定)的全部內容,希望文章能夠幫你解決所遇到的問題。

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