Ahm*_*mad 52 c++ virtual function
据我所知,抽象方法和纯虚函数都没有提供任何功能......那么我们可以说它们都是同一个东西吗?
此外,假设一个类(不一定声明为抽象)包含许多实现的方法(不是抽象或虚拟),但包含纯虚函数.这个类是抽象的吗?
Gor*_*son 59
是的,他们是一回事.在C++中,抽象方法只是描述纯虚函数特征的另一种方法.两者都只是指一种没有实现的方法,需要在实际实例化类之前在子类中实现.
C++中纯虚函数和抽象类的情况类似,因为它们本质上意味着完全相同的事情.任何抽象类必须至少有1个纯虚函数,否则它可以被实例化,也不会是抽象的.同样,任何具有至少1个纯虚函数的类都必须是抽象的,因为它需要扩展才能实际实现该方法.
因此,当且仅当它包含至少1个纯虚函数/抽象方法时,类才是抽象的.
后来,像Java和C#这样的语言使这样的事情变得更加明确,允许一个特殊的关键字来定义类抽象,而不是纯虚函数的存在.C++允许您执行与这些语言相同的操作,但它们只是更明确一些.:d
是的,抽象方法与纯虚函数完全相同; 这些术语通常可以互换使用.IMO,"纯虚函数"是C++技术上正确的术语,它具体表示该函数设置为0
:
class myClass {
public:
virtual void vfunc() = 0; // pure specifier
};
Run Code Online (Sandbox Code Playgroud)
抽象类定义为:
一个专门用作基类的类.抽象类包含至少一个纯虚函数.
所以基本上,抽象类是一个抽象类,因为它被设计成一个基类(根据定义,一些基类需要具有可实现的方法,这些方法需要是纯虚拟的).这些类只是根据它们的使用和扩展方式而成为抽象类.与Java这样的语言不同,没有abstract
或interface
关键字修饰符,所以这就是为什么我们需要一个"口头契约"来讨论C++中的抽象类.