未强制执行 C++ 虚函数

标签 c++ visual-studio-2010 function class inheritance

我有一个接口(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/

相关文章:

c++ - 在C++中向动态 vector 添加 double 时的神秘减速

vb.net - 更新语句中的SYNTAX错误Visual Basic

c++ - 在 C++ 中提供 jQuery 风格的可封装函数

python - 获取传递给函数的参数的列表/元组/字典?

c++ - 如何在 C++ 中按名称检索 Cocoa 枚举值?

c++ - 在C++中使用curl获取一段时间后更改的页面

c++ - 简单代码导致错误读取变量: Cannot access memory at address

visual-studio-2010 - ClickOnce 应用程序 EXE 文件证书签名

web-services - VS 2010 SP1 是否更改了从 VSTO 加载项中获取 .config 文件的位置?

javascript - 我怎样才能阻止警报成为一个功能?