Re: [問題] virtual & pure virtual
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):