小城镇建设投稿网站,网站被抄袭怎么投诉,域名申请证书,推广链接软件文章目录 【 1. 抽象类 】1.1 抽象类的定义1.2 抽象类的应用条件1.3 实例 【 2. 设计策略 】 接口描述了类的行为和功能#xff0c;而不需要完成类的特定实现。C 接口是使用 抽象类#xff08;abstract base class#xff0c;也称为ABC#xff09; 来实现的。
【 1. 抽象类… 文章目录 【 1. 抽象类 】1.1 抽象类的定义1.2 抽象类的应用条件1.3 实例 【 2. 设计策略 】 接口描述了类的行为和功能而不需要完成类的特定实现。C 接口是使用 抽象类abstract base class也称为ABC 来实现的。
【 1. 抽象类 】
1.1 抽象类的定义
如果 类中至少有一个函数被声明为纯虚函数则这个类就是 抽象类。纯虚函数是通过在声明中使用 “ 0” 来指定的如下所示
class Box
{public:// 纯虚函数virtual double getVolume() 0;private:double length; // 长度double breadth; // 宽度double height; // 高度
};1.2 抽象类的应用条件
设计抽象类的目的是为了给其他类提供一个可以继承的适当的基类。 抽象类不能被用于实例化对象它只能作为接口使用如果试图实例化一个抽象类的对象会导致编译错误。相对应的可用于实例化对象的类被称为 具体类。 如果一个 ABC抽象类 的子类需要被实例化则必须实现每个纯虚函数这也意味着 C 支持使用 ABC 声明接口。 如果没有在派生类中重写纯虚函数就尝试实例化该类的对象会导致编译错误。
1.3 实例
抽象类的实例基类 Shape 提供了一个接口 getArea()在两个派生类 Rectangle 和 Triangle 中分别实现了 getArea()我们可以看到一个抽象类是如何定义一个接口 getArea()两个派生类是如何通过不同的计算面积的算法来实现这个相同的函数。
#include iostreamusing 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)/2; }
};int main(void)
{Rectangle Rect;Triangle Tri;Rect.setWidth(5);Rect.setHeight(7);// 输出对象的面积cout Total Rectangle area: Rect.getArea() endl;Tri.setWidth(5);Tri.setHeight(7);// 输出对象的面积cout Total Triangle area: Tri.getArea() endl; return 0;
}【 2. 设计策略 】
面向对象的系统可能会使用一个抽象基类为所有的外部应用程序提供一个适当的、通用的、标准化的接口然后派生类通过继承抽象基类就把所有类似的操作都继承下来。外部应用程序提供的功能即公有函数在抽象基类中是以纯虚函数的形式存在的。这些纯虚函数在相应的派生类中被实现。这个架构也使得新的应用程序可以很容易地被添加到系统中即使是在系统被定义之后依然可以如此。