将虚函数声明设置为零?

时间:2010-07-26 21:57:50

标签: c++ oop

  

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

在C ++中,将函数声明设置为零意味着什么?我猜它与虚函数有关,而不是在这个类中实际定义的。在我正在阅读的代码头文件中找到:

virtual void SetValue(double val)=0;

这里发生了什么?

8 个答案:

答案 0 :(得分:11)

这是一个pure virtual function。它使得你必须派生一个类(并实现所述函数)才能使用它。

答案 1 :(得分:2)

这在C ++术语中称为纯虚拟成员函数。正如您所猜测的那样,这意味着该函数未在类中定义,而是必须在派生类中实现。您无法使用纯虚拟成员函数实例化类,纯虚函数的行为基本上类似于Java或C#中的抽象方法。

答案 2 :(得分:1)

这意味着它是一个纯虚拟方法 - 这意味着子类必须自己实现该方法。该方法仍然可以有一个实现,但是无法实例化具有纯虚方法的类,这使得它与各种其他语言中的abstract关键字类似。

答案 3 :(得分:0)

这意味着,class是抽象的,不能创建其对象。它可以用作另一个class的基础。
纯虚拟类在c++中也用interface作为java这样的语言,但当然它是不同的。

答案 4 :(得分:0)

如果设置要设置的虚函数,则称为Pure Virtual Functions。然后你的班级成为一个抽象的班级。 除非实现了纯虚函数,否则无法创建该类或任何子类的实例。

答案 5 :(得分:0)

方法SetValue是纯虚拟的。它的类没有提供该方法的实现,也无法实例化(因此我们称之为抽象)。另一方面,具体派生类必须提供这种方法的实现。查看更多here

答案 6 :(得分:0)

正如大家所提到的,这意味着该功能是纯虚函数。可以想象将函数指针设置为null。具有纯虚函数的类作为抽象类处理。这意味着派生类必须实现此虚函数。

偶尔,您可能会遇到所谓的“纯粹调用”错误。这意味着实际调用了纯虚函数,它很可能导致程序崩溃。纯调用的最常见原因是已调用该函数的对象已被删除。

答案 7 :(得分:0)

“SetValue”是一个纯虚拟成员函数,基类强制派生类提供。纯虚拟成员函数将无法实现。

纯虚拟成员函数指定成员函数将存在于具体派生类的每个对象上,即使成员函数未在基类中(通常)定义。

这是因为如果派生类打算实例化(即,如果它们打算具体化),则指定纯虚拟成员函数的语法会强制派生类实现成员函数。

在您的情况下,从基类派生的类的所有对象都将具有成员函数SetValue()。但是,因为基类是一个抽象概念,所以它不包含足够的信息来实现SetValue()。

想象一下,“= 0”就像是说“此函数的代码位于NULL指针。”

纯虚拟成员函数允许用户针对具有多个功能不同变体的接口编写代码。这意味着如果这些对象都在同一个抽象基类的保护伞下,则可以将语义不同的对象传递给函数。