0

C++ でこのような基本クラスをオーバーライドしようとしています

class A:
    QWidget *getWidget();

class B: public A:
    using A::getWidget;
    QWidget *getWidget();

これを使おうとすると:

A *test = new B();
test->getWidget();

ここでは、クラス A のウィジェットが返されます。ウィジェット B を取得する方法はありますか? クラスを検査して正しいウィジェットを取得するために B にキャストすることから始めたくないので、上記のコード スニペットのように使用できるようにしたいと考えています。助言がありますか?

4

2 に答える 2

6

まず第一に、関数呼び出しの動的ポリモーフィック解決が必要であるかのgetWidget()ように宣言する必要があります。virtualそれはあなたが取り組んでいる特定の問題を解決するはずです。

第 2 に、の関数を のスコープにusing A::getWidgetインポートしているため、 は役に立ちません。同じ名前とシグネチャを持つ関数が既に定義されています。AgetWidget()B

于 2013-02-03T19:21:06.913 に答える
1

それはC++コードですか?

class A
{
public:
    //you need the virtual keyword here
    virtual QWidget *getWidget();
    virtual ~A();
};

class B : public A
{
public:
    //you need using to overload a method from the base class, it's not needed for override
    QWidget *getWidget();
};

A *test = new B();
test->getWidget();
delete test;

LE: 基本クラスの仮想デストラクタも忘れないでください。

于 2013-02-03T19:26:30.390 に答える