给定
#include <iostream>
#include <string>
using std::cout;
using std::endl;
class A
{
public:
virtual int a() const = 0;
virtual int a(const int i) const = 0;
};
class B : public A
{
public:
virtual int a() const { return A::a(0); }
};
class C : public B
{
public:
virtual int a(const int i) const { return i; }
};
int main()
{
C c;
cout << c.a() << endl;
cout << c.a(1) << endl;
}
我没有使用不同的编译器进行测试,但是出现以下错误:
main.cpp:31:17: error: no matching function for call to ‘C::a()’
cout << c.a() << endl;
^
main.cpp:24:17: note: candidate: virtual int C::a(int) const
virtual int a(const int i) const { return i; }
^
main.cpp:24:17: note: candidate expects 1 argument, 0 provided
我真的不明白为什么,我期望该类C
可以在访问B::a()
。
似乎正在解决C.a()
as C.a(int)
。基本上,虚拟方法fromB
是不可见的。有人知道为什么吗?
编辑
这个想法就像:A
作为“接口”,B
作为“抽象类”,C
“具体类”
解
我试图实现是可能的using A::a
using B::a
,并改变B::a()
从呼叫A::a(0)
到a(0)
。
类似的例子在这里提供songyuanyao
C::a
皮 B::a
。当在a
class的范围内找到名称时C
,名称查找将停止,B
不会检查包括class在内的其他范围。
名称查找按如下所述检查范围,直到找到至少一个任何类型的声明为止,这时查找停止并且不再检查任何范围。
您可以添加using
引进B::a
到C
的范围。
class C : public B
{
public:
using B::a;
virtual int a(const int i) const { return i; }
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句