【发布时间】:2016-06-25 20:30:16
【问题描述】:
我想在调用抽象(虚拟)函数的抽象类中定义一个函数。但是当我从抽象类继承时,这个函数不会被继承:
class A {
public:
virtual void f(int t) = 0;
void f() {
f(0);
}
};
class B : public A {
public:
void f(int t) override { }
// using A::f; // uncomment to fix the problem
};
int main() {
B b;
b.f(0); // works
b.f(); // error: no matching function for call to ‘B::f()’
}
为什么这不起作用?解决方法是使用using A::f,但是为什么A::f()没有被继承呢?
【问题讨论】:
-
A::f被继承,但被B::f(int)隐藏。找到名称时停止名称查找。论点是否匹配在这一点上无关紧要。更清楚的例子:如果B定义了一个名为f的成员变量而不是一个成员函数,那么A::f也将找不到。如果你写b.A::f()而不是b.f(),你的程序将会编译。
标签: c++ inheritance abstract-class