抽象基类扩展

时间:2012-11-15 23:40:31

标签: c++ polymorphism

这是我的简化代码,需要您对有关执行不佳的多态性的宝贵意见。

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

3 个答案:

答案 0 :(得分:4)

应该是

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

由于

void foo() const

void foo()

功能不同。

答案 1 :(得分:2)

Y类中的

foo函数与X :: foo

具有不同的签名
class Y : public X
{
  public:
    void foo() const { cout << "hello" << endl; }
};

答案 2 :(得分:1)

Y类中的

foo不是const,因此您不会在X类中重载虚拟。