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

Are abstract methods and pure virtual functions the same thing?

本文关键字:一回事 函数 虚拟 抽象方法      更新时间:2023-10-16

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

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

是的,它们是一样的。在C++中,抽象方法只是描述纯虚拟函数特性的另一种方式。两者都只是指一个没有提供实现的方法,需要在子类中实现,然后才能真正实例化该类。

C++中纯虚拟函数和抽象类的情况类似,因为它们本质上意味着完全相同的东西。任何抽象类都必须至少有一个纯虚拟函数,否则它可能会被实例化而不是抽象的。同样,任何至少有一个纯虚拟函数的类都必须是抽象的,因为它需要扩展,这样才能真正实现方法。

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

后来,像Java和C#这样的语言使这样的事情更加明确,允许一个特殊的关键字来定义类抽象,而不是纯虚拟函数的存在。C++可以让你做与这些语言相同的事情,但它们只是更明确一点

在C++中,您不会显式地将类或方法声明为抽象。纯虚拟方法的存在使它们变得抽象。

是的,抽象方法与纯虚拟函数完全相同;这些术语经常互换使用。IMO,"纯虚拟函数"是C++技术上正确的术语,专门表示函数设置为0:

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

抽象类定义如下:

设计为专门用作基类。一抽象类至少包含一个纯虚拟函数。

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

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

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

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

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

一个至少有一个纯虚拟函数的类称为抽象类。