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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

【C++ Primer | 15】面试问题

發(fā)布時間:2023/11/30 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++ Primer | 15】面试问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 在成員函數中調用虛函數
  • #include <iostream> using namespace std; class CBase { public:void func1(){func2();}virtual void func2() {cout << "CBase::func2()" << endl;} }; class CDerived:public CBase { public:virtual void func2() { cout << "CDerived:func2()" << endl; } }; int main() {CDerived d;d.func1();return 0; }

    輸出結果:

    CDerived:func2()

    分析:

    • 第 20 行調用 func1 成員函數。進入 func1 成員函數,執(zhí)行到第 8 行,調用 func2 函數。看起來調用的應該是 CBase 類的 func2 成員函數,但輸出結果證明實際上調用的是 CDerived 類的 func2 成員函數。
    • 這是因為,在 func1 函數中,func2();等價于this -> func2();,而 this 指針顯然是 CBase* 類型的,即是一個基類指針,那么this -> func2();就是在通過基類指針調用虛函數,因此這條函數調用語句就是多態(tài)的。
      當本程序執(zhí)行到第 8 行時,this 指針指向的是一個 CDerived 類的對象,即 d,因此被調用的就是 CDerived 類的 func2 成員函數。

  • 在構造函數和析構函數中調用虛函數
  • #include <iostream> using namespace std; class A { public:virtual void hello() { cout << "A::hello" << endl; }virtual void bye() { cout << "A::bye" << endl; } }; class B : public A { public:virtual void hello() { cout << "B::hello" << endl; }B() { hello(); }~B() { bye(); } }; class C : public B { public:virtual void hello() { cout << "C::hello" << endl; } }; int main() {C obj;return 0; }

    輸出結果:

    B::hello A::bye
    • 類 A 派生出類 B,類 B 派生出類 C。
    • 第 23 行,obj 對象生成時會調用類 B 的構造函數,在類 B 的構造函數中調用 hello 成員函數。由于在構造函數中調用虛函數不是多態(tài),所以此時不會調用類 C 的 hello 成員函數,而是調用類 B 自己的 hello 成員函數。
    • obj 對象消亡時,會引發(fā)類 B 析構函數的調用,在類 B 的析構函數中調用了 bye 函數。類B沒有自己的 bye 函數,只有從基類 A 繼承的 bye 函數,因此執(zhí)行的就是類 A 的 bye 函數。
    • 將在構造函數中調用虛函數實現為多態(tài)是不合適的。以上面的程序為例,obj 對象生成時,要先調用基類構造函數初始化其中的基類部分。在基類構造函數的執(zhí)行過程中,派生類部分還未完成初始化。此時,在基類 B 的構造函數中調用派生類 C 的 hello 成員函數,很可能是不安全的。

  • 為什么基類中的析構函數要聲明為虛析構函數?
  • 直接的講,C++中基類采用virtual虛析構函數是為了防止內存泄漏。具體地說,如果派生類中申請了內存空間,并在其析構函數中對這些內存空間進行釋放。假設基類中采用的是非虛析構函數,當刪除基類指針指向的派生類對象時就不會觸發(fā)動態(tài)綁定,因而只會調用基類的析構函數,而不會調用派生類的析構函數。那么在這種情況下,派生類中申請的空間就得不到釋放從而產生內存泄漏。所以,為了防止這種情況的發(fā)生,C++中基類的析構函數應采用virtual虛析構函數。

    測試代碼:

    #include <iostream> #include <memory> using namespace std;class Base { public:Base() { cout << "Base Constructor" << endl; }~Base() { cout << "Base Destructor" << endl; } };class Derived : public Base { public:Derived() { cout << "Derived Constructor" << endl; }~Derived() { cout << "Derived Destructor" << endl; } };int main() {Base* p = new Derived();delete p;return 0; }

    輸出結果:

    Base Constructor Derived Constructor Base Destructor


    測試代碼

    #include <iostream> #include <memory> using namespace std;class Base { public:Base() { cout << "Base Constructor" << endl; }virtual ~Base() { cout << "Base Destructor" << endl; } };class Derived : public Base { public:Derived() { cout << "Derived Constructor" << endl; }virtual ~Derived() { cout << "Derived Destructor" << endl; } };int main() {Base* p = new Derived();delete p;return 0; }

    輸出結果:

    參考資料

  • C++調用虛函數的注意事項
  • 總結

    以上是生活随笔為你收集整理的【C++ Primer | 15】面试问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 男女男精品网站 | 成人av教育| 一本之道av| 一本色道久久综合亚洲二区三区 | 日韩美女黄色片 | 中文字幕第一页久久 | 精品无码人妻一区二区三 | 一级黄色录像大片 | 国产精品国产精品国产专区不卡 | 六月激情综合 | 国产精品久久久久久白浆 | 国产人妖ts重口系列网站观看 | 毛片亚洲av无码精品国产午夜 | 国产丝袜自拍 | 亚洲怡红院av | 香蕉视频免费网站 | 在线观看亚洲专区 | 午夜激情在线播放 | 久久人人添人人爽添人人片 | 中文字幕第9页 | 黄色动漫在线观看 | 亚洲无av | 欧美午夜精品久久久久久浪潮 | 成年人黄色免费网站 | 欧美岛国国产 | 色小姐综合网 | 欧美高清精品 | 亚洲自拍偷拍色图 | 本道综合精品 | 免费a v网站 | 福利在线免费观看 | av尤物 | 谁有免费的黄色网址 | 美女脱了内裤喂我喝尿视频 | 蜜桃传媒 | 国产真人做爰毛片视频直播 | 中文字幕一区久久 | 日韩女同强女同hd | 日本美女上床 | 国产麻豆剧传媒精品国产 | 国产伦精品一区二区. | 欧美一区二区高清视频 | 欧美日韩一区二区三区在线电影 | 黄站在线观看 | 亚洲综合中文 | 中国黄色免费 | 亚洲综合影视 | 欧美精品欧美精品系列 | 天天色综合图片 | 午夜一级免费 | 色播五月综合 | 婷婷成人av | 无码精品黑人一区二区三区 | www.好了av| 嫩草在线视频 | 婚后打屁股高h1v1调教 | 18精品爽国产白嫩精品 | 国产一区二区黄 | 亚洲日本在线观看视频 | 日韩成人午夜影院 | 欧美精品一区二区三区四区 | 久久久a级片 | 欧美在线播放一区二区 | 国产精品综合网 | 日本成片网 | 九草在线观看 | 欧美91在线 | 欧美性tv| av噜噜| 四虎色播 | 处破痛哭a√18成年片免费 | 久久美 | 国产黄色片在线观看 | 欧美成人高清视频 | 18久久| a一级黄色 | 日本色影院 | 日韩美女中文字幕 | 精品黑人一区二区三区国语馆 | 毛片av在线观看 | 87福利视频 | 久久视 | 亚洲视频一区二区 | 日日夜夜网| 色乱码一区二区三区在线男奴 | 国产第七页 | 综合久久久久 | 久久精精品久久久久噜噜 | 澳门一级黄色片 | 天天免费视频 | 夜夜草网 | 总受合集lunjian双性h | 中文字幕女优 | 亚洲成色www久久网站 | 欧美日韩a v | 亚洲黑丝在线 | 久久伊人婷婷 | 欧美成人a | 国产精品麻豆果冻传媒在线播放 |