作者nosame (夏曉宇)
看板C_and_CPP
標題[問題] 解構子的多型
時間Mon Mar 9 00:57:13 2009
這個問題困擾了我一段時間,這一大段程式裡面其實有些錯,是要改的
但不影響我想問的觀念 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
1F:推 yoco315:解構子不是看 "~X()" 這個名稱啦.. 解構子就是解構子.. 03/09 01:08
2F:→ yoco315:他是解構子,那compiler就會認得了,不用想的這麼死板 03/09 01:08
3F:→ adrianshum:那也不是叫多型, 多型是一個概念, 在 C++ 某程度上是以 03/09 10:57
4F:→ adrianshum:virtual method 達成 03/09 10:57