繁体   English   中英

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

[英]Are abstract methods and pure virtual functions the same thing?

据我所知,抽象方法和纯虚函数都不提供任何功能......所以我们可以说它们都是同一件事吗?

另外,假设一个 class(不一定声明为抽象)包含许多实现的方法(不是抽象或虚拟),但包含一个纯虚拟 function。 这是 class 那么抽象吗?

的,它们是一样的。 在 C++ 中,抽象方法只是描述纯虚拟 function 特性的另一种方式。 两者都只是表示没有提供实现的方法,需要在子类中实现 class 才能实际实例化。

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

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

Later on, languages like Java and C# made things like this more explicit, allowing a special keyword to define a class abstract rather than the presence of a pure-virtual function. C++ 让您可以做与这些语言相同的事情,但它们只是更明确一点。 :D

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

是的,抽象方法与纯虚函数完全一样; 这些术语经常互换使用。 IMO,“纯虚函数”是 C++ 技术上正确的术语,专门表示 function 设置为0的事实:

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

抽象 class 定义为

一个 class 设计为专门用作基础 class。 一个抽象 class 包含至少一个纯虚拟 function。

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

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

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

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

另外,假设一个 class(不一定声明为抽象)包含许多实现的方法(不是抽象或虚拟),但包含一个纯虚拟 function。 这是 class 那么抽象吗?

具有至少 1 个纯虚拟 function 的 class 称为抽象 class。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM