C++ 继承:调用重载的基 class 函数
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
}
覆盖工作正常,但覆盖 shadows 基本 class 功能。也就是说,known class B 中的名称查找仅找到 B 中的一个,查找到此为止。您可以使用基础 class 资格,或 B 中的 using
声明,或(丑陋的)手动转发器。
示例:
class B
: public A
{
public:
using A::bar;
virtual void bar() override {};
};
这实际上在 ISO C++ FAQ 中,带有代码示例
技巧是添加一个
public:
using A::bar;
谁能帮我理解为什么重载的 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
}
覆盖工作正常,但覆盖 shadows 基本 class 功能。也就是说,known class B 中的名称查找仅找到 B 中的一个,查找到此为止。您可以使用基础 class 资格,或 B 中的 using
声明,或(丑陋的)手动转发器。
示例:
class B
: public A
{
public:
using A::bar;
virtual void bar() override {};
};
这实际上在 ISO C++ FAQ 中,带有代码示例
技巧是添加一个
public:
using A::bar;