Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是0;&引用;在C+中声明纯虚函数时执行+;?_C++_Virtual - Fatal编程技术网

C++ 什么是0;&引用;在C+中声明纯虚函数时执行+;?

C++ 什么是0;&引用;在C+中声明纯虚函数时执行+;?,c++,virtual,C++,Virtual,可能重复: 我知道,为了声明纯虚函数,需要使用“=0;”语法,如下所示: class Foo { protected: Foo(); virtual int getValue() = 0; }; 我的问题是,“=0;”语法到底做了什么(在编译器的内部工作中)?它实际上是否将函数指针设置为零?它是否仅仅是一种意图陈述,就像Java和C#中的“抽象”保留字一样,如果是这样,为什么不在语言中添加一个保留字,比如“抽象”,而不是使用这种晦涩难懂的语法呢?它声明了一个“纯虚拟”函数

可能重复:

我知道,为了声明纯虚函数,需要使用“=0;”语法,如下所示:

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

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

它声明了一个“纯虚拟”函数。=0基本上类似于另一个“pure”关键字。这个问题与你的有关:


纯虚拟函数根本没有主体,必须由继承它的任何类定义:

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

它迫使您在子类中定义它。< /p>这个问题得到了解答。因为纯< /COD>关键字对于C++程序员来说太可读了。@ NealCurk: Bjarne Stroustrup对上下文关键字(即在某些上下文中仅是关键字而不是其他关键字)保持警惕。这是正确的,因为它使词法分析变得更加困难(即如果没有上下文,你不能说某个特定标识符是否是关键字)。我不能因此责备它。然而,他对引入完整的关键字也很谨慎,这会产生所有那些奇怪的用法(
static
!!)。@MatthieuM。C++11确实有一些上下文关键字,不过:)语法没有固有的含义。仅仅因为两个语法结构看起来有些相似,并不意味着它们也有相似的语义。