亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 中的接口(抽象类)

接口描述了 C++ 类的行为或功能,而无需提交该类的特定实现。

C++ 接口是使用抽象类实现的 并且这些抽象类不应与数据抽象相混淆,数据抽象是一种将实现细节与关联数据分开的概念。

一个类通过将其至少一个函数声明为纯虚拟而成为抽象类 功能。通过在其声明中放置“=0”来指定纯虚函数,如下所示 -

class Box {
   public:
      // pure virtual function
      virtual double getVolume() = 0;
      
   private:
      double length;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
};

抽象类的目的 (通常称为 ABC)是提供一个适当的基类,其他类可以从该基类继承。抽象类不能用于实例化对象,只能用作接口 .尝试实例化抽象类的对象会导致编译错误。

因此,如果需要实例化ABC的子类,则必须实现每个虚函数,这意味着它支持ABC声明的接口。未能覆盖派生类中的纯虚函数,然后尝试实例化该类的对象,是编译错误。

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

抽象类示例

考虑以下示例,其中父类为基类提供接口以实现名为 getArea() 的函数 -

现场演示
#include <iostream>
 
using namespace std;
 
// Base class
class Shape {
   public:
      // pure virtual function providing interface framework.
      virtual int getArea() = 0;
      void setWidth(int w) {
         width = w;
      }
   
      void setHeight(int h) {
         height = h;
      }
   
   protected:
      int width;
      int height;
};
 
// Derived classes
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);
   
   // Print the area of the object.
   cout << "Total Rectangle area: " << Rect.getArea() << endl;

   Tri.setWidth(5);
   Tri.setHeight(7);
   
   // Print the area of the object.
   cout << "Total Triangle area: " << Tri.getArea() << endl; 

   return 0;
}

当上面的代码编译并执行时,它会产生以下结果 -

Total Rectangle area: 35
Total Triangle area: 17

您可以看到一个抽象类如何根据 getArea() 定义一个接口,而另外两个类实现了相同的功能,但使用不同的算法来计算特定于形状的面积。

设计策略

面向对象的系统可能使用抽象基类来提供适用于所有外部应用程序的通用和标准化接口。然后,通过从该抽象基类继承,形成操作类似的派生类。

外部应用程序提供的功能(即公共功能)在抽象基类中作为纯虚函数提供。这些纯虚函数的实现在派生类中提供,对应于应用程序的特定类型。

这种架构还允许将新应用程序轻松添加到系统中,即使在系统已经定义之后也是如此。


C语言

  1. C#抽象类和方法
  2. C++ 运算符
  3. C++ 类和对象
  4. C++朋友函数和朋友类
  5. C++ 类模板
  6. Java 抽象类和抽象方法
  7. C++ 中的结构和类
  8. C# 抽象类教程与示例:什么是抽象?
  9. Java - 对象和类
  10. Java - 抽象
  11. Java - 接口
  12. C++ 中的存储类