【问题标题】:What does "= 0;" do when declaring pure virtual functions in C++? [duplicate]"= 0;" 是什么意思在 C++ 中声明纯虚函数时该怎么做? [复制]
【发布时间】:2012-03-05 23:38:55
【问题描述】:

可能重复:
Why pure virtual function is initialized by 0?

我知道,为了声明一个纯虚函数,你需要使用“= 0;”语法,像这样:

class Foo  
{
protected:
    Foo();
    virtual int getValue() = 0;
};

我的问题是,“= 0;”到底是什么(在编译器的内部工作中)语法做什么?它实际上是否将函数指针设置为零?它只是一种意图声明,就像 Java 和 C# 中的“抽象”保留字一样,如果是这样,为什么不在语言中添加一个保留字,例如“抽象”,而不是使用这种晦涩难懂的语法?

【问题讨论】:

  • 此问题已回答here
  • 因为 pure 关键字对于 C++ 程序员来说太易读了。
  • @nightcracker: Bjarne Stroustrup 对上下文关键字(即标识符在某些上下文中只是关键字而不是其他上下文)很谨慎,这是正确的,因为它使词法分析变得更加困难(即你不能说是否一个特定的标识符是一个关键字或不是没有它的上下文)。我不能为此责备它。然而,他也对引入完整的关键字持谨慎态度,这会产生所有那些奇怪的用法(static !!!!)。
  • @MatthieuM。不过,C++11 确实有一些上下文关键字 :)
  • 语法没有内在含义。仅仅因为两个句法结构看起来有些相似,并不暗示它们也有相似的语义。

标签: c++ virtual


【解决方案1】:

它强制你在子类中定义它。

【讨论】:

    【解决方案2】:

    这表示没有“默认”实现。任何派生类都需要实现它。

    【讨论】:

    • 注意纯虚函数可以有实现。
    【解决方案3】:

    它声明了一个“纯虚”函数。 = 0 基本上就像另一个“纯”关键字。这个问题和你有关:Why is a pure virtual function initialized by 0?

    纯虚函数根本没有主体,必须由继承它的任何类定义:http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 2015-09-03
      • 2011-05-14
      • 2021-12-16
      相关资源
      最近更新 更多