有 virtual 及 = 0 的类,可以实例化吗?
在 C++ 中,包含纯虚函数(函数声明后带有 = 0)的类是抽象类。抽象类不能被实例化。
原因在于纯虚函数是一种在基类中声明但没有具体实现的虚函数,它的存在是为了给派生类提供一个接口规范,强制派生类去实现这些函数。当一个类中有纯虚函数时,这个类就变成了抽象类,它更像是一种蓝图或者模板,用来规定派生类应该具有的行为。
例如,假设有一个图形基类 Shape,其中有一个纯虚函数 area () 用来计算面积。
class Shape {
public:
virtual double area() = 0;
};
如果尝试像下面这样实例化 Shape 类:
Shape s;
编译器会报错,因为它不知道如何计算面积,这个计算面积的具体实现应该由继承自 Shape 的具体图形类(如圆形、矩形等)来完成。而虚函数(非纯虚函数)的类可以被实例化,只要它不是抽象类。