我有一个接口(interface)类(见第一个代码块),实现(见第二个代码块)不会产生错误,即使 CreateMessage() 没有定义......我完全困惑,因为据我看到这不应该编译。
哦,在 Microsoft 7 上使用 Visual Studio 2010...有人以前见过这个吗?或者我的代码中有错误吗?
代码块 1:
namespace Common
{
namespace Messaging
{
class iNetworkMessageFactory
{
public:
// +----------------------------------------------------------------------
// + Description : iNetworkMessageFactory class destructor.
// +----------------------------------------------------------------------
virtual ~iNetworkMessageFactory() { }
// +----------------------------------------------------------------------
// + Description : Create a network message.
// +----------------------------------------------------------------------
virtual iNetworkMessage *CreateMessage() = 0;
};
} // Namespace Common
} // Namespace Messaging
代码块 2:
#include <Messaging/iNetworkMessageFactory.h>
class NetworkMessageFactory : public Common::Messaging::iNetworkMessageFactory
{
public:
// +----------------------------------------------------------------------
// + Description : NetworkMessageFactory class constructor.
// +----------------------------------------------------------------------
NetworkMessageFactory();
// +----------------------------------------------------------------------
// + Description : NetworkMessageFactory class destructor.
// +----------------------------------------------------------------------
~NetworkMessageFactory();
/*
// +----------------------------------------------------------------------
// + Description : Create a network message.
// +----------------------------------------------------------------------
iNetworkMessage *CreateMessage( NetworkMessageType typeID
, iNetMsgBody *body
, ConnectionID connID );
*/
};
最佳答案
很好,应该不会产生错误。否则,您将无法拥有多个抽象祖先。如果您尝试调用纯虚拟,您将收到运行时错误。
例如,C++ 允许您继承 NetworkMessageFactory 并在派生类中提供纯虚函数的实现。没有理由强制在 NetworkMessageFactory 类本身中存在一个实现。
关于未强制执行 C++ 虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22444929/