继承和方法重载
Posted
技术标签:
【中文标题】继承和方法重载【英文标题】:Inheritance and method overloading 【发布时间】:2011-02-27 18:34:45 【问题描述】:为什么 C++ 编译器会出现这个错误?为什么我可以从 B 访问 lol(),但无法访问 rofl() [无参数]。问题在哪里?
class A
public:
void lol(void)
void rofl(void) return rofl(0);
virtual void rofl(int x)
;
class B : public A
public:
virtual void rofl(int x)
;
int _tmain(int argc, _TCHAR* argv[])
A a;
a.lol();
a.rofl(1);
a.rofl();
B b;
b.lol();
b.rofl(1);
b.rofl(); //ERROR -> B::rofl function does not take 0 arguments
return 0;
【问题讨论】:
【参考方案1】:B::rofl(int)
“隐藏”A::rofl()
。为了让A
的rofl
重载,您应该将B
声明为using A::rofl;
。
class B : public A
public:
using A::rofl;
...
;
这是 C++ 的一个明智之举:它警告您可能还需要覆盖 B
中的 A::rofl()
方法。要么这样做,要么明确声明使用A
的其他重载。
【讨论】:
是的,但是 A::rofl() 不是虚拟的。这就是想法 - rofl() 总是调用虚拟 rofl(0)。 @0xDEAD BEEF:在这种情况下,您打算使用它,因此请告诉编译器using A::rofl;
。
@0xDEAD BEEF:顺便说一句,您正在以这种方式创建“非虚拟界面”;您可能希望您的 A::rofl(int)
是纯虚拟的,并且受到保护。
没有。我想创建纯虚拟 Read(buffer, size, timeout) 和 wrapper (override) Read(buffer, size) Read(buffer, size, 0); BTW - 使用关键字效果很好!
@xtofl
有这样的方法名称,问题已经为你解决了:p以上是关于继承和方法重载的主要内容,如果未能解决你的问题,请参考以下文章