1

多分ばかげた質問。

私が次のものを持っているとしましょう:

class A{
     int x;
     int y;
     virtual int get_thing(){return x;}
};

class B : public A {
     int get_think(){return y;}
};

上記の例では、オーバーライドするコードにタイプミスがあるため、B::get_thingはxを返します。

コンパイル時に、get_thing関数がクラスBでオーバーライドされ、yが返されるようにするにはどうすればよいですか?

4

2 に答える 2

8

仮定A::get_thingは仮想であり、仮定class Bはから派生しclass A、C ++ 11をサポートしている場合は、override特別な識別子を使用できます。

class B : public A{
     int get_think() override {return y;}
};

これにより、コンパイラエラーが発生します。これは、メソッドのシグネチャ、つまり名前、cv修飾子、およびパラメーターのタイプに基づいていることに注意してください。リターン型や関数本体は入りません。

于 2012-11-06T14:57:43.410 に答える
-1

まず、あなたの例に誤りがあります、私はBの子であると思われますAね?!

しかし、答えは次のとおりです。関数のアドレスを比較できます(もちろん、必要でプログラミング時にチェックできない場合):

if( reinterpret_cast<void*>(&B::get_think) != reinterpret_cast<void*>(&A::get_think) ) {
    std::cout << "B override A";
} else {
    std::cout << "B override A";
}
于 2012-11-06T14:59:25.680 に答える