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

3 に答える 3

4

する必要があります

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

なぜなら

void foo() const

void foo()

同じ機能ではありません。

于 2012-11-15T23:42:14.983 に答える
2

fooクラス Y の funciton は X::foo と異なる署名を持っています

class Y : public X
{
  public:
    void foo() const { cout << "hello" << endl; }
};
于 2012-11-15T23:42:11.417 に答える
1

fooクラス Y は const ではないため、クラス X で仮想をオーバーロードしていません。

于 2012-11-15T23:42:11.293 に答える