C++继承和相同的功能名称

C++ inheritance and same funciton names

本文关键字:功能 继承 C++      更新时间:2023-10-16

>我有这种情况:

class A
{
public:
A();
virtual ~A();
void doSomething();
};

class B : public A
{
public:
B();
void doSomething(int parameter);
};

如果我执行以下操作:

int main()
{
B b;
b.doSomething();
}

它给了我一个编译错误(没有匹配的函数(。 如何在不更改B功能名称的情况下解决此问题?B派生自A因此它也具有不带参数的doSomething()函数。为什么它不起作用? 感谢您的帮助。

目前,B::doSomething隐藏A::doSomething.

您可以使用using来解决问题:

class B : public A
{
public:
using A::doSomething;
B();
void doSomething(int parameter);
};

这个答案只是这个解决方案的替代方法,以防你不被允许修改类B


如果不允许修改类B以在类中添加using A::doSomething;(如此处已经建议的那样(,则可以获取指向成员函数A::doSomething()的指针,然后通过实例上的该成员函数指针调用它b

auto fptr = &A::doSomething;
B b;
(b.*fptr)();

或者更简单,通过正确限定成员函数,不需要成员函数指针:

B b;
b.A::doSomething(); // calls A::doSomething()