为什么无法访问基类的函数重载
Why are function overloads of base classes inaccessible
请考虑以下示例:
struct Base
{
void foo()
{
cout << "Base foon";
}
void bar()
{
cout << "Base barn";
}
};
struct Derivate : public Base
{
void foo(int x)
{
cout << "Derivate foon";
}
};
如果我们创建两个实例,例如
Base a;
Derivate b;
Base
对象a
可以像往常一样调用其成员函数(a.foo(); a.bar();
(。
使用b
时,调用b.bar()
按预期工作,但由于我超载了Base::foo()
因此无法调用b.foo()
。
为什么?
你没有重载Base::foo
,而是隐藏了它。它仍然可以访问,可以这样调用:
static_cast<Base &>(b).foo();
相关文章:
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- c++:可变模板和函数重载
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 解决模板成员函数重载
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 推断模板化函数中的函数重载
- C++复制函数重载导致"must be a nonstatic member function"错误
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 可变参数泛型 lambda 和函数重载
- C++中的函数重载和继承
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- C/C++ 可变参数宏函数重载
- 将基类的成员函数重载到其他派生类C++
- C++ 函数重载匹配
- C++函数重载,具体步骤是什么
- C++:使用 param pack 显式调用函数重载
- 隐式生成的函数重载用于右值参数?
- 使用函数重载输入运算符
- 运算符重载函数上的函数重载