我正在尝试从与派生类中的方法同名的基类中调用方法。这是一个简化的示例:
#include <iostream>
using namespace std;
class Base
{
public:
void print() {
cout << "Printing from base" << endl;
}
void print(int num) {
cout << "Printing number from base: " << num << endl;
}
};
class Derived : public Base
{
using Base::print;
public:
void print() {
cout << "Printing from derived" << endl;
}
};
int main()
{
Derived x;
x.print();
x.Base::print(1);
//x.print(1); // Gives a compilation error
return 0;
}
基本上,我希望能够调用 x.print(1) 并获得“从基数打印数字:1”,即自动调用与签名匹配的方法,即使它驻留在基类中。
没有using Base::print;
, 我得到error: no matching function for call to 'Derived::print(int)'
,由于名称隐藏,这非常有意义。
因此,我添加了该行,但现在错误是error: 'void Base::print(int)' is inaccessible
为什么会这样?我使用公共继承,所以我会认为它很容易获得?
如示例中所示,手动调用可以正常工作x.Base::print(1);
,但我想更透明地进行。然后我当然可以在派生类中重新实现函数的包装器,但这似乎也不是很优雅。
如果之前的问题已经涵盖了这一点,我深表歉意,我阅读了其中的一堆并发现了很多类似的案例,但没有任何帮助我。