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想要函数调用的动态多态解析。这应该可以解决您正在解决的特定问题。

其次,using A::getWidget是没用的,因为您正在将A的函数getWidget()导入 的范围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 回答