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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比)

發布時間:2023/11/30 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多態的基本概念

  • 多態是面向對象設計語言數據抽象和繼承之外的第三個基本特征
  • 多態性(polymorphism)提供接口與具體實現之間的另一層隔膜,從而將“what”和“how”分離開來,多態性改善了代碼的可讀和組織性,同時也使創建的程序具有可擴展性,項目不僅在最初創建時期可以擴展,而且當項目在需要有新的功能時也能擴展
  • c++支持編譯時多態(靜態多態)和運行時多態(動態多態),運算符重載和函數重載就是編譯時多態,而派生類和虛函數實現運行多態
  • 靜態多態和動態多態的區別就是函數地址是早綁定(靜態聯編)還是晚綁定(動態聯編),如果函數的調用,在編譯階段就可以確定函數的調用地址,并產生代碼,就是靜態多態(編譯時多態),就是說地址是早綁定的,而如果函數的調用地址不能編譯不能再編譯期間確定,而確定,而需要在運行時才能決定,這這就屬于晚綁定(動態多態,運行時多態)
  • 靜態聯編和動態聯編

    多態分類

  • 靜態多態 ------函數重載
  • 動態多態-------虛函數 ?繼承關系
  • 靜態聯編

  • 地址早綁定,編譯階段定好地址
  • 動態聯編

  • 地址晚綁定,運行時候綁定好地址
  • 多態

  • 父類的引用或指針指向子類對象
  • #include<iostream>using namespace std;class Animal { public:virtual void speak(){cout << "動物在說話" << endl;} };class Cat : public Animal { public:void speak(){cout << "小貓在說話" << endl;}};//調用doSpeak ,speak函數的地址早就綁定好了,早綁定,靜態聯編,編譯階段就確定好了地址 //參數類型為Aniaml類類型,所以地址綁定為Animal類的地址 //如果想調用貓的speak,不能提前綁定好函數的地址,所以需要在運行時候再去確定函數地址 //動態聯編,寫法Speak放法改為虛函數,再父類上聲明虛函數,發生了多態 void doSpeak(Animal & animal)//Animal & animal = cat {animal.speak(); }//如果發生了繼承的關系,編譯器允許進行類型轉換 void test01() {Cat cat;doSpeak(cat);} //什么叫多態? //父類的引用或者指針 指向 子類對象int main() {test01();system("pause");return 0; }

    注意事項:

    多態原理解析?

  • 必須通過基類的指針或者引用調用虛函數
  • 被調用的函數必須是虛函數,且派生類必須對基類的虛函數進行重寫
    ?
  • Animal類里的內部結構?

    ?

    Cat類里的內部結構

  • 當父類中有了虛擬函數,內部結構發生了改變
  • 內部多了一個vfptr ? virtual ?function ?pointer 虛擬函數表指針,指向vftable 虛函表
  • 父類中結構 ?vptr ?& Animal::speak
  • 子類中 ?進行 繼承 ?會繼承 vfptr ?vfptrtable
  • 構造函數中,會將虛函數表指針 指向自己的虛函數表
  • 如果發生了重寫,會替換掉虛函數表中的原有的speak,改為 &Cat::speak
  • 深入剖析,內部到底如何調用
  • ((void(*)()) (*(int *)*(int *)animal))();
  • 虛函數重寫的兩個例外:

    1. 協變(基類與派生類虛函數返回值類型不同) 派生類重寫基類虛函數時,與基類虛函數返回值類型不同。即基類虛函數返回基類對象的指針或者引 用,派生類虛函數返回派生類對象的指針或者引用時,稱為協變。

    2. 析構函數的重寫(基類與派生類析構函數的名字不同) 如果基類的析構函數為虛函數,此時派生類析構函數只要定義,無論是否加virtual關鍵字,都與基類的 析構函數構成重寫,雖然基類與派生類析構函數名字不同。雖然函數名不相同,看起來違背了重寫的規 則,其實不然,這里可以理解為編譯器對析構函數的名稱做了特殊處理,編譯后析構函數的名稱統一處 理成一樣
    ?

    ?

    #include<iostream>using namespace std;class Animal { public:virtual void speak(){cout << "動物在說話" << endl;} };class Cat : public Animal { public:virtual void speak(){cout << "小貓在說話" << endl;} };//調用doSpeak ,speak函數的地址早就綁定好了,早綁定,靜態聯編,編譯階段就確定好了地址 //參數類型為Aniaml類類型,所以地址綁定為Animal類的地址 //如果想調用貓的speak,不能提前綁定好函數的地址,所以需要在運行時候再去確定函數地址 //動態聯編,寫法Speak放法改為虛函數,再父類上聲明虛函數,發生了多態 void doSpeak(Animal & animal)//Animal & animal = cat {animal.speak(); }//如果發生了繼承的關系,編譯器允許進行類型轉換 void test01() {Cat cat;doSpeak(cat);} void test02() {//cout << sizeof(Animal) << endl;//沒寫virtual時是1個字節//寫了是4//父類指針指向子類對象發生了多態Animal * animal = new Cat;//animal->speak();//*(int *)*(int *)animal函數地址((void(*)()) (*(int *)*(int *)animal))(); } //什么叫多態? //父類的引用或者指針 指向 子類對象int main() {//test01();test02();system("pause");return 0; }

    重載,重寫,重定義的對比

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 亚洲一卡二卡三卡 | 欧美人与性禽动交精品 | 成人福利视频 | 成人羞羞网站 | 91看片网页版 | 亚洲怡春院| 在线播放无码后入内射少妇 | 一区二区三区欧美在线 | 天海翼av在线播放 | 午夜看片福利 | 成人av国产 | 精品66| 成人免费视频国产在线观看 | 自拍愉拍 | 韩国明星乱淫(高h)小说 | 国产欧美一区二区三区免费看 | 激情黄色小说视频 | 亚洲美女激情视频 | 色综合网址| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 视色av| 天天躁日日躁aaaaxxxx | 成人免费高清在线播放 | 欧美日韩成人在线观看 | 自慰无码一区二区三区 | 天天爱天天草 | 99热精品在线观看 | xxx黄色片| 日本在线观看视频网站 | 男人操女人网站 | 小日子的在线观看免费第8集 | 国产精品一区不卡 | 亚洲av首页在线 | 99在线视频免费观看 | 一区二区三区四区在线 | 一级少妇女片 | 日韩在线不卡视频 | aa黄色片 | 成人毛片视频在线观看 | 欧美人妻一区二区三区 | 爽爽视频在线观看 | 国产婷婷 | 一卡二卡三卡在线视频 | 小视频在线播放 | 国产免费一区二区三区视频 | 天堂中文av | 一级艳片新婚之夜 | 黄网站色视频 | 99成人免费视频 | 992tv在线影院 | 精品小视频在线观看 | 波多野结衣激情视频 | 精品久久久无码中文字幕边打电话 | 少妇激情四射 | 亚洲国产精品成人无码区 | 99ri视频| 污视频在线观看网址 | 伊人av综合网 | 中文字幕 国产精品 | 美日韩三级 | 国产美女精品久久 | 久久久精品中文字幕麻豆发布 | 日韩一级片av | 午夜影院黄| 亚洲欧洲国产视频 | 欧美精品成人一区二区在线观看 | 日韩精品福利视频 | 亚洲精品欧美在线 | 在线观看色网站 | 好色艳妇小说 | 国产性一乱一性一伧一色 | 日本一区二区免费电影 | 狠狠操狠狠操 | 九色蝌蚪9l视频蝌蚪9l视频 | 美女脱衣服一干二净 | www.亚洲欧美 | 91免费 看片 | 黄色a网站 | 国产网友自拍视频 | 会喷水的亲姐姐 | 天天草天天操 | 人人妻人人澡人人爽精品欧美一区 | 亚洲精品久久久久久久蜜桃 | 色视频一区二区 | 日韩精品在线电影 | 免费激情网 | 欧美在线资源 | 精品久久久无码中文字幕边打电话 | 在线免费日韩av | 一区二区三区黄 | 亚洲国产精品久久精品怡红院 | 中文字幕免费在线看线人 | 大又大又粗又硬又爽少妇毛片 | 欧美日韩不卡一区 | 日本在线中文字幕专区 | 在线观看欧美精品 | 国产一区二区三区精品视频 | 欧美老熟妇一区二区 | 少妇闺蜜换浪荡h肉辣文 |