【发布时间】:2013-04-20 23:50:41
【问题描述】:
鉴于以下代码示例,为什么重载的AbstractBaseClass::DoAThing( const char* ) 在实现重载的纯抽象DoAThing( const char* const* ) 方法的SomeEndClass 中作为继承方法不可见?
class AbstractBaseClass
{
public:
virtual void DoAThing( const char* withThis ) {}
virtual void DoAThing( const char* const* withThat ) = 0;
AbstractBaseClass() {}
virtual ~AbstractBaseClass() {}
};
class SomeMiddlewareClass : public AbstractBaseClass
{
public:
void ThisIsCool() {}
SomeMiddlewareClass() {}
virtual ~SomeMiddlewareClass() {}
};
class SomeEndClass : public SomeMiddlewareClass
{
public:
void DoAThing( const char* const* withThat ) {}
SomeEndClass() {}
virtual ~SomeEndClass() {}
};
void SomeFunction()
{
SomeEndClass* myClass = new SomeEndClass();
myClass->DoAThing( "withThis" );
((SomeMiddlewareClass*)myClass)->DoAThing( "withThisToo" );
delete myClass;
}
编译器(和索引器)在myClass->DoAThing( "withThis" ); 行产生以下错误,而((SomeMiddlewareClass*)myClass)->DoAThing( "withThisToo" ); 行被接受。
Invalid arguments ' 候选者是:void DoAThing(const char * const *)
没有匹配函数调用‘SomeEndClass::DoAThing(const char [9])’
SomeEndClass 不应该继承AbstractBaseClass::DoAThing( const char* ) 的实现吗?我做错了什么?
【问题讨论】:
-
这两个虚函数都必须实现。他们不是。
标签: c++ inheritance abstract-class pure-virtual