[問題] 解構子的多型

看板C_and_CPP (C/C++)作者 (夏曉宇)時間16年前 (2009/03/09 00:57), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/1
這個問題困擾了我一段時間,這一大段程式裡面其實有些錯,是要改的 但不影響我想問的觀念 main也可以不要去看它 以前記得老師解這題時,告訴我們若依照Apple物件解構的順序是 呼叫~Fruit() => ~Fruit()呼叫~Apple() =>~Apple()完成解構 => ~Fruit()完成解構 看得出來有多型的方法呼叫在,可是同學和我討論時,說要完成多型 必需子物件方法和父類別提供方法要同樣名字,才可以實現多型 但~Apple() 和 ~Fruit()不同名,所以不會完成多型呼叫,我一時間也不知道該怎麼解釋 特來請教大家 class Fruit{ private: double weight; char *color; public: Fruit(double, char *); virtual ~Fruit(); }; // 這裡是虛擬函式 可以操作子物件的方法 ^^^^^^^^^^^^^^^^^^^^^ Fruit::Fruit(double w, char *col) { weight = w; color = new char[strlen(col)+1]; strcpy(color, col); } Fruit::~Fruit(){ delete color; } class Apple:public Fruit{ private: char *variety; public: Apple(double, char *, char *); ~Apple(); }; Apple::Apple(double w, char *col, char *var): Fruit(w,col) { variety = new char[strlen(var)+1]; strcpy(variety, var); } Apple::~Apple(){ delete variety; } main(){ Fruit *basket[20]; int i; double weight; char color[128], variety[128]; for(i=0; i<20; i++) basket[i] = new Apple(weight, color, variety); delete [] basket; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.139.111

03/09 01:08, , 1F
解構子不是看 "~X()" 這個名稱啦.. 解構子就是解構子..
03/09 01:08, 1F

03/09 01:08, , 2F
他是解構子,那compiler就會認得了,不用想的這麼死板
03/09 01:08, 2F

03/09 10:57, , 3F
那也不是叫多型, 多型是一個概念, 在 C++ 某程度上是以
03/09 10:57, 3F

03/09 10:57, , 4F
virtual method 達成
03/09 10:57, 4F
文章代碼(AID): #19i_Zgd0 (C_and_CPP)
文章代碼(AID): #19i_Zgd0 (C_and_CPP)