Linux系统下imx6ull QT编程—— C++接口(九)

Linux QT编程


一、接口(抽象类)

接口描述了类的行为和功能,而不需要完成类的特定实现。C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 “= 0” 来指定的。
设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。

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

二、接口示例

是以狗类为说明,例程与 多态类似,只是 Aninmal 类的 run()方法定义为纯虚函数,纯虚函数不用实现,由派生类 Dog 和 Cat 类实现重写即可。
新建一个目录 11_abstract_class,编辑一个 11_abstract_class.cpp 内容如下

1 #include <iostream>
2
3 using namespace std;
4
5 /* 定义一个动物类 */
6 class Animal
7 {
    
    
8 public:
9 virtual void run() = 0;
10 };
11
12 /* 定义一个狗类,并继承动物类 */
13 class Dog : public Animal
14 {
    
    
15 public:
16 void run() {
    
    
17 cout<<"Dog 的 run()方法"<<endl;
18 }
19
20 };
21
22 /* 定义一个猫类,并继承动物类 */
23 class Cat : public Animal
24 {
    
    
25 public:
26 void run() {
    
    
27 cout<<"Cat 的 run()方法"<<endl;
28 }
29
30 };
31
32 int main()
33 {
    
    
34 /* 实例化 dog 对象 */
35 Dog dog;
36 
37 /* 实例化 cat 对象 */
38 Cat cat;
39
40 /* dog 调用 run()方法 */
41 dog.run();
42 
43 /* cat 调用 run()方法 */
44 cat.run();
45 
46 return 0;
47 }

在这里插入图片描述

虽然结果和例程与多态实现一样,但是却表现了两种不同的思想。学 C++重要的是思想,当我们对这种思想有一种的了解后,不管是 Qt 或者其他 C++程序,我们都能快速学习和了解。

猜你喜欢

转载自blog.csdn.net/qq_51963216/article/details/130974318