抽象方法和纯虚函数是一回事吗?
据我所知,抽象方法和纯虚函数都不提供任何function……所以我们可以说它们都是同一个东西?
另外,假设一个类(不一定声明为抽象)包含一些实现的方法(不是抽象的或虚拟的),而是包含一个纯虚函数。 这个课是抽象的吗?
是的 ,他们是一样的东西。 在C ++中,抽象方法只是描述纯虚函数特征的另一种方式。 这两个都只是一个没有实现的方法,只要在实际实例化类之前需要在子类中实现。
纯虚函数和C ++中抽象类的情况是相似的,因为它们本质上意味着完全相同的东西。 任何抽象类必须至less有一个纯虚函数,否则它可能被实例化,不会是抽象的。 同样,至less有一个纯虚函数的类必须是抽象的,因为它需要扩展,所以方法才能真正实现。
因此,一个类是抽象的, 当且仅当它包含至less一个纯虚函数/抽象方法。
后来,像Java和C#这样的语言使得这个更加明确,允许一个特殊的关键字来定义一个类的抽象,而不是一个纯虚函数的存在。 C ++可以让你和这些语言做同样的事情,但是它们只是更加明确一些。 :d
你不要在C ++中明确地声明类或方法是抽象的。 纯虚拟方法的存在使得它们变得抽象。
在C ++中,纯虚拟成员函数导致封闭types为“抽象types”。
函数本身不能抽象,尽pipe这个术语经常被滥用。
是的,抽象方法和纯虚函数完全一样, 这些术语经常互换使用。 国际海事组织,“纯虚函数”是C ++技术上正确的术语,具体表示该function设置为0
的事实:
class myClass { public: virtual void vfunc() = 0; // pure specifier };
抽象类定义如下 :
一个专门用作基类的类。 抽象类至less包含一个纯虚函数。
所以基本上,一个抽象类是一个抽象类,因为它被devise成一个基类(根据定义,一些基类需要有可实现的方法,这将需要是纯虚拟的)。 这些类只是通过如何使用和扩展而成为抽象类。 不像Java这样的语言,没有abstract
或interface
关键字修饰符,所以这就是为什么我们需要一个“口头契约”来谈论C ++中的抽象类。
我会说是的,抽象方法和纯虚函数在概念上是相同的东西。
此外,假设一个类(不一定声明为抽象)包含一些已实现的方法(不是抽象的或虚拟的),而是包含一个纯虚函数。 这个课是抽象的吗?
一个至less有一个纯虚函数的类被称为抽象类。