免费发布信息
微信公众号

C++ 接口(抽象类)主要有哪些?

   来源:黔优网责任编辑:优优  时间:2023-09-22 17:09:46 浏览量:81
导读:C++接口(抽象类)接口描述了类的行为和功能,而不需要完成类的特定实现。C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被

C++ 接口(抽象类)

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

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

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

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

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

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

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

抽象类的实例

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

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

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

Total Rectangle area: 35 Total Triangle area: 17

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

设计策略

面向对象的系统可能会使用一个抽象基类为所有的外部应用程序提供一个适当的、通用的、标准化的接口。然后,派生类通过继承抽象基类,就把所有类似的操作都继承下来。

外部应用程序提供的功能(即公有函数)在抽象基类中是以纯虚函数的形式存在的。这些纯虚函数在相应的派生类中被实现。

这个架构也使得新的应用程序可以很容易地被添加到系统中,即使是在系统被定义之后依然可以如此。

 
 
 
没用 0举报 收藏 0
免责声明:
黔优网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优网官方立场,请读者仅做参考。本文标题:C++ 接口(抽象类)主要有哪些?,本文链接:https://www.qianu.com/news/251567.html,欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法信息,请您立即点此【投诉举报】并提供有效线索,也可以通过邮件(邮箱号:kefu@qianu.com)联系我们及时修正或删除。
 
 

 

 
推荐图文
推荐商业资讯