0

重複の可能性:
C++ 仮想関数の戻り値の型

ここで、単純だが紛らわしい質問があります。オーバーライドされたメソッドの戻り値の型を、基本クラスで定義された抽象型とは異なるものにすることは合法ですか?? 私はそれをしましたが、コンパイラは文句を言いませんでした...誰か説明してもらえますか?

class MyBaseClass
{
    int value;

public:
    virtual int getValue() = 0;
};

class MyClass : public MyBaseClass
{
    double value;

public:
    virtual double getValue(); // here!!! return is double, not int
};

double MyClass::getValue()
{
   return this->value;
}

コンパイラは、似たようなもの (MSVC と MinGW) を完全に受け入れました... これがどの程度合法なのか、誰か説明してもらえますか?

4

2 に答える 2

2

戻り値の型は異なることが許可されていますが、非常に制限的な方法でのみであり、コードは違法です。オーバーライドの戻り値の型が異なることが許される唯一の方法は、ベースの戻り値の型がポインターまたは参照である場合に共変になることです。別の言い方をすれば、ベースがベース クラスへのポインタまたは参照を返す場合、オーバーライドはそれぞれ、ベースの派生クラスへのポインタまたは参照を返すことができます。

于 2012-04-08T11:28:56.840 に答える
0

オーバーライドしていますか?メソッドだけを書いたようです。

于 2012-04-08T16:55:42.873 に答える