知识分享:C++ 接口(抽象类)

接口描述了类的行为和功能,而不需要完成类的特定实现。

C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。

 

知识分享:C++ 接口(抽象类)_第1张图片

如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 “= 0” 来指定的,如下所示:

class Box { public: // 纯虚函数 virtual double getVolume() = 0; private: double length; // 长度 double breadth; // 宽度 double height; // 高度 };

设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。

因此,如果一个 ABC 的子类需要被实例化,则必须实现每个虚函数,这也意味着 C++ 支持使用 ABC 声明接口。如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。

可用于实例化对象的类被称为具体类

 

知识分享:C++ 接口(抽象类)_第2张图片

抽象类的实例

请看下面的实例,基类 Shape 提供了一个接口 getArea(),在两个派生类 Rectangle 和 Triangle 中分别实现了 getArea()

实例

#include 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)/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; }

当上面的代码被编译和执行时,它会产生下列结果:

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

 

知识分享:C++ 接口(抽象类)_第3张图片

Total Rectangle area: 35 Total Triangle area: 17

从上面的例中,我们可以看到一个抽象类是如何定义一个接口 getArea(),两个派生类是如何通过不同的计算面积的算法来实现这个相同的函数。

你可能感兴趣的:(C++,c++,知识,接口,抽象类)