设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。因此,如果一个 ABC 的子类需要被实例化,则必须实现每个虚函数,这也意味着 C++ 支持使用 ABC 声明接口。如果没有在派生类中重载纯虚函数,就尝试实例化该类的对象,会导致编译错误。可用于实例化对象的类被称为具体类。
例子如下:
#include <iostream>
using namespace std;
class Shape
{
public:
virtual int getArea()=0;
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};
class Rectangle: public Shape
{
public:
int getArea()
{
return(width * height);
}
};
class Triangle: public Shape
{
public:
int getArea()
{
return(width * height * 0.5);
}
};
int main()
{
Rectangle Rect;
Triangle Tri;
Rect.setWidth(5);
Rect.setHeight(7);
cout << "Total Rectangle area:" << Rect.getArea()<<endl;
Tri.setHeight(7);
Tri.setWidth(5);
cout << "Total Triangle area:" << Tri.getArea() << endl;
return 0;
}
运行结果为: