Re: [問題] virtual & pure virtual

看板C_and_CPP作者 (sbr)時間16年前 (2009/03/21 06:28), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《godman362 (Shizuru)》之銘言: : 想問下列兩者(一、二)之間的差異: : 一、 : class Base : { : private : : int i; : public : : Base() : i(0) {} : virtual void show() = 0; : }; : void Base::show() { cout <<" Show Func" <<endl; } : class Derived : public Base : { : }; : 二、 : class Base : { : private : : int i; : public : : Base() : i(0) {} : virtual void show() { cout <<" Show Func" <<endl; }; : }; : class Derived : public Base : { : }; : 在第一個範例中,我將show寫成了pure virtual : 但是我卻又再外面定義了show,所以我對第一個範例的認知會變成第二個範例 : 可是事實上卻不是如此 : 第一個範例不可以通過編譯,但是第二個可以 : 第二個很明顯可以,因為virtual有被Base類別定義,且不是pure virtual : 不過難道被宣告成pure virtual之後,在外面所作的定義都不相等於第二個範例嗎? 這兩個例子應該都是可以編譯成功,因為都沒有 instantiate Derived instance 的動作。 一個 class 一旦有宣告 pure virtual function 會使得此 class 變成 abstract class,即使該 class 實際上有定義 pure virtual function(有實做碼)。 pure virtual function 也促使 derived class 得負起 overriding 此 member function 的責任,否則 derived class 也成了 abstract class。 例子一,如果你有 instantiate Derived object 會錯誤,導因於 Derived class 是 abstract class。讓 Derived class override show function,他就不會是 abstract class。 class Derived : public Base { public: void show() { Base::show(); } }; 以這樣子的應用來看,pure virtual function 提供實做,並不是完全沒有意義。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.128.240

03/21 14:34, , 1F
原來如此,我懂了
03/21 14:34, 1F

03/21 14:35, , 2F
相當感謝您的回答
03/21 14:35, 2F
文章代碼(AID): #19n8aCa8 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #19n8aCa8 (C_and_CPP)