软件开发入门教程网 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(),两个派生类是如何通过不同的计算面积的算法来实现这个相同的函数。

设计策略

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

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

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

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

 

相关文章
|
1月前
|
编译器 C++ 开发者
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
78 1
|
1天前
|
Linux 程序员 图形学
C++语言在现代软件开发中的应用与实践
C++语言在现代软件开发中的应用与实践
8 2
|
13天前
|
C语言 C++ 容器
探索c++:string常用接口 迷雾
探索c++:string常用接口 迷雾
36 0
|
13天前
|
缓存 编译器 API
NumPy与其他语言(如C/C++)的接口实践
【4月更文挑战第17天】本文介绍了NumPy与C/C++的接口实践,包括Python与C/C++交互基础、NumPy的C API和Cython的使用。通过案例展示了如何将C++函数与NumPy数组结合,强调了内存管理、类型匹配、错误处理和性能优化的最佳实践。掌握这些技能对于跨语言交互和集成至关重要。
|
20天前
|
C++
C++面向对象编程中的 纯虚函数 与 抽象类
C++面向对象编程中的 纯虚函数 与 抽象类
|
29天前
|
C++
C++示例(电脑组装)展现C++多态的优势以及虚函数抽象类的应用
C++示例(电脑组装)展现C++多态的优势以及虚函数抽象类的应用
|
1月前
|
Ubuntu 编译器 C++
【Conan 入门教程 】在Ubuntu上使用Conan编译C++第三方库:一站式解决方案
【Conan 入门教程 】在Ubuntu上使用Conan编译C++第三方库:一站式解决方案
192 1
|
1月前
|
安全 算法 C++
了解C++ 软件开发中的鲁棒性
了解C++ 软件开发中的鲁棒性
38 0
|
1月前
|
算法 测试技术 数据处理
【C++ 设计思路】优化C++项目:高效解耦库接口的实战指南
【C++ 设计思路】优化C++项目:高效解耦库接口的实战指南
75 5
|
1天前
|
存储 Java C++
【C++类和对象】探索static成员、友元以及内部类
【C++类和对象】探索static成员、友元以及内部类