第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么第二種構(gòu)造函數(shù)的方式,運行結(jié)果會多顯示一行呢?

為什么第二種構(gòu)造函數(shù)的方式,運行結(jié)果會多顯示一行呢?

C++
三國紛爭 2023-05-02 15:10:36
#include <iostream> using namespace std;class Point {  public:Point(double a = 0, double b = 0){     x = a;      y = b; }  ~Point(){ cout << "Executing Point destructor \n";} private: double x; double y;   }; class Circle: public Point { public:Circle(double a=0, double b=0, double c=0):Point(a,b), radius(c){} ~Circle(){cout<<"executing Circle destructor"<<endl;}private: double radius; };int main(){ Point * p = new Circle(1, 1, 4); delete p; return 0; }執(zhí)行的結(jié)果是:Executing Point destructor但我把派生類的構(gòu)造函數(shù):Circle(double a=0, double b=0, double c=0):Point(a,b), radius(c){}改成Circle(double a=0, double b=0, double c=0){    Point(a,b);     radius = c; }運行結(jié)果是:Executing Point destructor Executing Point destructor
查看完整描述

1 回答

?
慕碼人8056858

TA貢獻1803條經(jīng)驗 獲得超6個贊

Circle(double a=0, double b=0, double c=0){    Point(a,b);//這行寫法是錯誤的
    radius = c;
}

你只能在構(gòu)造函數(shù)后面的冒號那里(叫初始化列表),用參數(shù)來初始化基類.
不能在構(gòu)造函數(shù)體內(nèi)這么寫(因為當開始執(zhí)行函數(shù)體時, 基類已經(jīng)完成了構(gòu)造),你這么寫事實上相當于在棧上構(gòu)造了一個臨時對象, 函數(shù)返回后即被銷毀,于是多了一行輸出.
而類成員(radius)兩種寫法都可以,可以在初始化列表初始化,也可以在函數(shù)體里賦值,前者有更高的執(zhí)行效率(不考慮優(yōu)化的話).

另外你的main函數(shù)中的用法也存在問題,如果你希望用基類的指針儲存派生類對象,那么你需要把基類的析構(gòu)函數(shù)聲明為virtual的,否則在delete的時候會出現(xiàn)內(nèi)存泄漏.


查看完整回答
反對 回復(fù) 2023-05-05
  • 1 回答
  • 0 關(guān)注
  • 295 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號