[問題] constructor的問題

看板C_and_CPP作者 (不痛而獲)時間15年前 (2010/08/25 18:15), 編輯推噓2(2011)
留言13則, 3人參與, 最新討論串1/2 (看更多)
遇到的問題: (題意請描述清楚) Cell_Phone::Cell_Phone(7); //為何不會影響Cell_Phone_Pay內容? 7寫到哪裡去了? 希望得到的正確結果: 7 程式跑出來的錯誤結果: 4 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++ 有問題的code: (請善用置底文標色功能) #include <iostream> using namespace std; class Cell_Phone { public: Cell_Phone(int cost){Cell_Phone_Pay=cost;} void set_data(int cost){Cell_Phone_Pay=cost;} void show_Pay(){cout<< "手機話費NT:"<<Cell_Phone_Pay << endl;} int Cell_Phone_Pay; }; class Pay:public Cell_Phone { public: Pay(int x):Cell_Phone(x){ // this->Cell_Phone::Cell_Phone(5);//ok // this->Cell_Phone::Cell_Phone(6);//ok Cell_Phone::Cell_Phone(7); //為何不會影響Cell_Phone_Pay內容? 7寫到哪裡去了? // Cell_Phone::set_data(8);//ok } }; void main(void) { Pay Obj(4); Obj.show_Pay(); } 補充說明: 板上很多利害人物, 如果問題太蠢, 會盡快自刪. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.209.4

08/26 02:24, , 1F
你唯一能建構父類別子物件的機會在 initialization
08/26 02:24, 1F

08/26 02:26, , 2F
list, 建構子不是想呼叫就呼叫的, 你這編譯應該不會過
08/26 02:26, 2F

08/26 02:26, , 3F
才對
08/26 02:26, 3F

08/26 02:28, , 4F
編譯會過..那行的意義是create一個temporary的物件
08/26 02:28, 4F

08/26 02:28, , 5F
在Pay的Constructor裡Create一個暫時的Cell_Phone物件
08/26 02:28, 5F

08/26 02:29, , 6F
VC++可以執行耶
08/26 02:29, 6F

08/26 02:29, , 7F
因為這兩個物件互不相關 當然也就不會影響原物件的值了
08/26 02:29, 7F

08/26 02:29, , 8F
Cell_Phone(7); 才是建立暫時物件, 建構子不是靜態成
08/26 02:29, 8F

08/26 02:30, , 9F
員, 不能這樣呼叫
08/26 02:30, 9F

08/26 02:34, , 10F
我是用 GCC 4.5, VC系列 還真的像h大所說...
08/26 02:34, 10F

08/26 02:34, , 11F
你在main裡面也能呼叫Cell_Phone::Cell_Phone(7)啊..
08/26 02:34, 11F

08/26 02:34, , 12F
沒道理在Pay的Constructor不能叫吧
08/26 02:34, 12F

08/26 05:16, , 13F
謝謝聖戰神~ "Create一個暫時的Cell_Phone物件"
08/26 05:16, 13F
※ 編輯: pttone 來自: 140.113.209.4 (06/17 05:00)
文章代碼(AID): #1CTLsoqa (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CTLsoqa (C_and_CPP)