抽象方法和纯虚拟函数是一回事吗
Are abstract methods and pure virtual functions the same thing?
据我所知,抽象方法和纯虚拟函数都不提供任何功能。。。那么,我们可以说它们都是一样的东西吗?
此外,假设一个类(不一定声明为抽象的(包含许多实现的方法(不是抽象的或虚拟的(,但包含一个纯虚拟函数。那么这门课是抽象的吗?
是的,它们是一样的。在C++中,抽象方法只是描述纯虚拟函数特性的另一种方式。两者都只是指一个没有提供实现的方法,需要在子类中实现,然后才能真正实例化该类。
C++中纯虚拟函数和抽象类的情况类似,因为它们本质上意味着完全相同的东西。任何抽象类都必须至少有一个纯虚拟函数,否则它可能会被实例化而不是抽象的。同样,任何至少有一个纯虚拟函数的类都必须是抽象的,因为它需要扩展,这样才能真正实现方法。
因此,类是抽象的当且仅当它至少包含一个纯虚拟函数/抽象方法。
后来,像Java和C#这样的语言使这样的事情更加明确,允许一个特殊的关键字来定义类抽象,而不是纯虚拟函数的存在。C++可以让你做与这些语言相同的事情,但它们只是更明确一点
在C++中,您不会显式地将类或方法声明为抽象。纯虚拟方法的存在使它们变得抽象。
是的,抽象方法与纯虚拟函数完全相同;这些术语经常互换使用。IMO,"纯虚拟函数"是C++技术上正确的术语,专门表示函数设置为0
:
class myClass {
public:
virtual void vfunc() = 0; // pure specifier
};
抽象类定义如下:
设计为专门用作基类。一抽象类至少包含一个纯虚拟函数。
所以基本上,抽象类就是抽象类,因为它被设计成基类(根据定义,一些基类需要有可实现的方法,这些方法需要是纯虚拟的(。这些类只是通过如何使用和扩展而成为抽象类。与Java等语言不同,没有abstract
或interface
关键字修饰符,所以这就是为什么我们需要一个"语言契约"来讨论C++中的抽象类。
在C++中,纯虚拟成员函数会导致封闭类型成为"抽象类型"。
函数本身不能是抽象的,尽管这个术语经常以这种方式被误用。
我会说是的,抽象方法和纯虚拟函数在概念上是一样的。
此外,假设一个类(不一定声明为抽象的(包含许多实现的方法(不是抽象的或虚拟的(,但包含一个纯虚拟函数。那么这门课是抽象的吗?
一个至少有一个纯虚拟函数的类称为抽象类。
- 为什么对于gcc来说,"UNIX"和"unix"宏不是一回事?
- 在OPENCV中归一化函数中的直方图
- 是否可以将一种函数类型转换为另一种采用相同参数但返回类型不同的函数类型
- 我的一堆函数出现"undefined reference"错误,我不知道为什么
- C++中的"derived"与Java中的"extended"是一回事吗?
- 部分模板专用化可能不适用于函数,但重载不是一回事吗?
- 是c++模板元编程的一种函数编程形式
- 抽象类与基类是一回事吗?
- matlab to C++/openCV 归一化函数
- const 和 constexpr 最终会是一回事吗?
- 我怎样才能在 C++ 中拥有一组函数
- 使用可变宏或模板来实现一组函数
- 用可变数量的参数成功地重写一组函数
- 同时将一组函数编译为.LIB和.DLL
- c++结构:以一定的时间速率重复一组函数
- 使用c++函数模板实现一组函数
- c++ 11指针惟一帮助函数
- Std::hash_set和Std::unordered_set是一回事吗?
- Visual Studio为一组函数分离.h和.cpp文件
- 抽象方法和纯虚拟函数是一回事吗