软件开发入门教程网 Search之C++ 接口(抽象类)

简介: 软件开发入门教程网 Search之C++ 接口(抽象类)

    C++ 基本的输入输出

    📒博客主页:  iOS游戏开发博客主页

    🎉欢迎关注🔎点赞👍收藏⭐留言📝

    📌本文由iOS游戏开发原创!

    📆51CTO首发时间:🌴2022年12月12日🌴

   ✉️这世界很喧嚣,做自己就好!

   🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

⭐本文介绍⭐

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

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

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

1

class Box

2

{

3

  public:

4

     // 纯虚函数

5

     virtual double getVolume() = 0;

6

  private:

7

     double length;      // 长度

8

     double breadth;     // 宽度

9

     double height;      // 高度

10

};

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

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

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

抽象类的实例

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

实例

1

#include <iostream>

2

3

using namespace std;

4

5

// 基类

6

class Shape

7

{

8

public:

9

  // 提供接口框架的纯虚函数

10

  virtual int getArea() = 0;

11

  void setWidth(int w)

12

  {

13

     width = w;

14

  }

15

  void setHeight(int h)

16

  {

17

     height = h;

18

  }

19

protected:

20

  int width;

21

  int height;

22

};

23

24

// 派生类

25

class Rectangle: public Shape

26

{

27

public:

28

  int getArea()

29

  {

30

     return (width * height);

31

  }

32

};

33

class Triangle: public Shape

34

{

35

public:

36

  int getArea()

37

  {

38

     return (width * height)/2;

39

  }

40

};

41

42

int main(void)

43

{

44

  Rectangle Rect;

45

  Triangle  Tri;

46

47

  Rect.setWidth(5);

48

  Rect.setHeight(7);

49

  // 输出对象的面积

50

  cout << "Total Rectangle area: " << Rect.getArea() << endl;

51

52

  Tri.setWidth(5);

53

  Tri.setHeight(7);

54

  // 输出对象的面积

55

  cout << "Total Triangle area: " << Tri.getArea() << endl;

56

57

  return 0;

58

}

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

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

设计策略

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

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

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

🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

 

相关文章
|
3月前
|
C++
【C++】实现日期类相关接口(三)
【C++】实现日期类相关接口
|
3月前
|
C++
【C++】实现日期类相关接口(二)
【C++】实现日期类相关接口
|
3月前
|
C++
【C++】实现日期类相关接口(一)
【C++】实现日期类相关接口
|
3月前
|
程序员 C++ 开发者
C++入门教程:掌握函数重载、引用与内联函数的概念
通过上述介绍和实例,我们可以看到,函数重载提供了多态性;引用提高了函数调用的效率和便捷性;内联函数则在保证代码清晰的同时,提高了程序的运行效率。掌握这些概念,对于初学者来说是非常重要的,它们是提升C++编程技能的基石。
31 0
|
4月前
|
BI 定位技术 C++
超级好用的C++实用库之地理相关接口
超级好用的C++实用库之地理相关接口
50 0
|
5月前
|
C++
拥抱C++面向对象编程,解锁软件开发新境界!从混乱到有序,你的代码也能成为高效能战士!
【8月更文挑战第22天】C++凭借其强大的面向对象编程(OOP)能力,在构建复杂软件系统时不可或缺。OOP通过封装数据和操作这些数据的方法于对象中,提升了代码的模块化、重用性和可扩展性。非OOP方式(过程化编程)下,数据与处理逻辑分离,导致维护困难。而OOP将学生信息及其操作整合到`Student`类中,增强代码的可读性和可维护性。通过示例对比,可以看出OOP使C++代码结构更清晰,特别是在大型项目中,能有效提高开发效率和软件质量。
39 1
|
6月前
|
存储 编译器 Linux
【C++】string类的使用②(容量接口Capacity )
这篇博客探讨了C++ STL中string的容量接口和元素访问方法。`size()`和`length()`函数等价,返回字符串的长度;`capacity()`提供已分配的字节数,可能大于长度;`max_size()`给出理论最大长度;`reserve()`预分配空间,不改变内容;`resize()`改变字符串长度,可指定填充字符。这些接口用于优化内存管理和适应字符串操作需求。
|
6月前
|
C++ 容器
【C++】string类的使用①(迭代器接口begin,end,rbegin和rend)
迭代器接口是获取容器元素指针的成员函数。`begin()`返回首元素的正向迭代器,`end()`返回末元素之后的位置。`rbegin()`和`rend()`提供反向迭代器,分别指向尾元素和首元素之前。C++11增加了const版本以供只读访问。示例代码展示了如何使用这些迭代器遍历字符串。
|
7月前
|
数据采集 自然语言处理 数据挖掘
一文搞懂:【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信
一文搞懂:【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信
184 0
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
63 2