C++继承:调用重载基类函数
C++ Inheritance: calling overloaded base class function
有人能帮我理解为什么重载的bar函数在这种情况下不起作用吗?
class A {
public:
void foo(int a) {};
void bar(int a) {};
virtual void bar()=0;
};
class B : public A{
public:
virtual void bar() override {};
};
int main(int argc, char* argv[])
{
B b;
b.foo(2); // fine
b.bar(); // fine
b.bar(2); // not fine
}
重写工作正常,但重写会隐藏基类函数。也就是说,在已知类B中的名称查找只找到B中的一个,查找到此为止。您可以使用基类限定,也可以使用B中的using
声明,或者(丑陋的)手动转发器。
示例:
class B
: public A
{
public:
using A::bar;
virtual void bar() override {};
};
这实际上在ISO C++常见问题解答中,代码示例为
技巧是添加
public:
using A::bar;
https://isocpp.org/wiki/faq/strange-inheritance#hiding-规则
相关文章:
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 将自定义函数传递到基抽象类中以延迟执行
- 调用原子的 store() 时可以调用基类型类的函数吗?C++
- C++17 使用驱动类常量作为基类构造函数的参数来初始化基类构造函数
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 从基类调用函数的多态性
- 在成员构造函数之后调用基类构造函数
- 在C++单元测试上下文中,抽象基类是否应将其他抽象基类作为函数参数
- 如何在将原始指针移动到基类构造函数之前从unique_ptr中提取原始指针
- 如何在具有相同函数名称的派生类中调用基类的函数
- 我不能访问基类的函数
- 根据模板参数引用不同基类的函数
- 在基/派生类中调用C++的纯虚函数
- C++ 模板化基类的函数模板专用化
- 如果基类指针无法访问派生类成员函数,那么多态性有什么方便的呢?
- 如何在C++中调用基类虚函数
- 指向从指针派生类成员函数的指针,指向基类成员函数
- C++:在共享对象中调用抽象基类构造函数/未定义的符号
- 如何在 C++ 中将参数传递给基类构造函数