2012-11-15 221 views
0

下面是我的簡化代碼,它需要您關於實施不良多態性的寶貴意見。抽象基類擴展

class X 
{ 
    public: 
     void test(); 
    protected: 
     virtual void foo() const = 0; 
}; 


class Y : public X 
{ 
    public: 
     void foo(){ cout << "hello" << endl; } 
}; 


int main() 
{ 
    X *obj = new Y(); 
} 

我在編譯時出現以下錯誤。

test.cpp: In function ‘int main()’: 
test.cpp:23: error: cannot allocate an object of abstract type ‘Y’ 
test.cpp:14: note: because the following virtual functions are pure within ‘Y’: 
test.cpp:9: note: virtual void X::foo() const 

回答

4

應該是

class Y : public X 
{ 
    public: 
     void foo() const { cout << "hello" << endl; } 
}; 

因爲

​​

void foo() 

是不一樣的功能。

1

foo類Y不是常量,這樣你就不會超載虛擬類X.

2

foo功能可按類Y具有與X不同的簽名:: foo的

class Y : public X 
{ 
    public: 
    void foo() const { cout << "hello" << endl; } 
};