gpt4 book ai didi

c++ - 为什么抽象类的实现看不到重载的纯虚函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:32 25 4
gpt4 key购买 nike

给定以下代码示例,为什么重载的 AbstractBaseClass::DoAThing( const char* ) 在实现重载的纯方法的 SomeEndClass 中作为继承方法不可见抽象 DoAThing( const char* const* ) 方法?

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 ' Candidates are: void DoAThing(const char * const *)

no matching function for call to ‘SomeEndClass::DoAThing(const char [9])’

SomeEndClass 不应该继承 AbstractBaseClass::DoAThing( const char* ) 实现吗?我做错了什么?

最佳答案

您的 SomeEndClass::DoAThing() 函数不仅覆盖从基类继承的函数,而且隐藏基类中该函数的其他重载。

您可以将 using 声明添加到您的 SomeEndClass 类:

using SomeMiddlewareClass::DoAThing;

因此:

class SomeEndClass : public SomeMiddlewareClass
{
public:

using SomeMiddlewareClass::DoAThing;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

void DoAThing( const char* const* withThat ) {}

SomeEndClass() {}
virtual ~SomeEndClass() {}
};

通过此修复,您可以在 live example 中看到您的程序正在编译.

关于c++ - 为什么抽象类的实现看不到重载的纯虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com