【问题标题】:= operator in function prototype [duplicate]= 函数原型中的运算符 [重复]
【发布时间】:2011-09-28 16:36:39
【问题描述】:

可能重复:
Pure virtual functions may not have an inline definition. Why?

我遇到了一个看起来像这样的函数原型:

    virtual void functionName(const int x) = 0;

=0 到底是什么意思?

【问题讨论】:

  • @Alf P. Steinbach:这两个问题相似但不一样,恕我直言。
  • @DarkDust:仍然值得看看这个问题。它解释了为什么声明该类不提供纯虚方法的实现是不正确的。
  • @DarkDust:我同意它们并不相同,但 AFAICS 没有选择说“这个问题是另一个问题的一部分并由另一个问题回答”

标签: c++ function-prototypes


【解决方案1】:

这表示纯虚拟(抽象)函数。包含此类函数的类是自动抽象的,您要实例化的任何派生类都必须实现此函数。

【讨论】:

    【解决方案2】:

    表示这个函数是纯虚函数,不会在这个类中实现。 这也意味着该类是一个抽象类,因为它包含一个纯虚函数。 所以你不能创建包含纯虚函数的类的实例。

    【讨论】:

    • -1 "并且不会在这个类中实现" 这是不正确的。
    • 每天学习。 Thx 为我指出这一点。但这给我留下了一个问题:在声明它们为纯的类中实现这些纯函数的频率是多少?
    • 我想我编程错了 :) 我从来没有一个抽象类需要析构函数,因为我所有的抽象都只是接口。
    • @Nobody:即使析构函数没有做任何事情,它名义上仍然存在。析构函数是特殊的,将它们标记为虚拟并不意味着派生类析构函数被称为“而不是”基类析构函数,因为基类析构函数名义上称为以及派生类析构函数,即使其中一个或两个析构函数实际上没有做任何事情。
    【解决方案3】:

    这意味着函数是抽象的,没有任何实现,你必须在派生类中实现这个函数。

    【讨论】:

    • -1 “没有任何实现”这是不正确的:可以有一个实现(在同一个类中声明它是纯虚拟的)。
    【解决方案4】:

    这意味着functionName 是一个纯虚 方法。即类不提供方法的实现,子类需要实现。

    这通常用于希望定义每个子类都需要实现的方法并且无法为其提供有意义的默认值的基类。

    【讨论】:

    • 子类(只有那些你想实例化的)确实必须重写这个方法,但抽象类可能仍然提供它的实现。
    • -1 “该类不提供方法的实现”这是不正确的,正如@Rafal 所述。
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2011-03-05
    • 2015-01-24
    • 2011-06-09
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多