抽象方法和纯虚函数是一回事吗?

时间:2011-07-04 18:19:06

标签: c++ function virtual

据我所知,抽象方法和纯虚函数都没有提供任何功能......那么我们可以说它们都是一样的吗?

此外,假设一个类(不一定声明为抽象)包含许多已实现的方法(不是抽象或虚拟),但包含纯虚函数。这个类是抽象的吗?

5 个答案:

答案 0 :(得分:54)

,它们是一回事。在C ++中,抽象方法只是描述纯虚函数特征的另一种方法。两者都只是指一种没有实现的方法,需要在实际实例化类之前在子类中实现。

C ++中纯虚函数和抽象类的情况类似,因为它们本质上是完全相同的。任何抽象类必须至少有1个纯虚函数,否则它可以被实例化,也不会是抽象的。同样,任何具有至少1个纯虚函数的类必须是抽象的,因为它需要扩展,以便实际可以实现该方法。

因此,类是抽象的当且仅当它包含至少1个纯虚函数/抽象方法时。

后来,像Java和C#这样的语言使这样的事情变得更加明确,允许一个特殊的关键字来定义类抽象,而不是纯虚函数的存在。 C ++允许您执行与这些语言相同的操作,但它们只是更明确一些。 :d

答案 1 :(得分:15)

您没有在C ++中将类或方法显式声明为抽象。纯虚方法的存在使它们成为抽象的。

答案 2 :(得分:6)

是的,抽象方法与纯虚函数完全相同;这些术语通常可以互换使用。 IMO,“纯虚函数”是C ++技术上正确的术语,它明确表示函数设置为0的事实:

class myClass {
public:
  virtual void vfunc() = 0; // pure specifier
};

抽象类是defined by

  

一个旨在成为的类   专门用作基类。一个   抽象类至少包含一个   纯虚函数。

基本上,抽象类是一个抽象类,因为它被设计成一个基类(根据定义,一些基类需要具有可实现的方法,这些方法需要是纯虚拟的)。这些类只是根据它们的使用和扩展方式而成为抽象类。与Java之类的语言不同,没有abstractinterface关键字修饰符,因此这就是为什么我们需要一个“口头契约”来讨论C ++中的抽象类。

答案 3 :(得分:5)

在C ++中,纯虚拟成员函数导致封闭类型为“抽象类型”。

函数本身不能是抽象的,尽管这个术语经常以这种方式被滥用。

答案 4 :(得分:3)

我会说是的,抽象方法和纯虚函数在概念上是一回事。

  

此外,假设一个类(不一定声明为抽象)包含许多已实现的方法(不是抽象或虚拟),但包含纯虚函数。这个类是抽象的吗?

具有至少1个纯虚函数的类称为抽象类。