C++ 接口的实现,及作用通俗理解方式

接口

C++中的接口,一般就是指抽象类,是一种用来描述类对外提供的操作、方法或功能的集合——注意,一般只是描述(声明),而不对这些方法或功能进行定义实现,通常在类的继承或多态中作为基类使用,这种用法也与其特性有关。值得一提的是,接口中的方法或功能一般需要在派生类中进行重写定义实现。

抽象类

C++的接口通常是使用抽象类来实现的,而什么是抽象类呢?

抽象类一般指的是包含一个或多个纯虚函数的类。

至于纯虚函数的概念和实现方法,可参考上一章节的内容:C++ 纯虚函数定义语法,及作用

重点提示:因为抽象类无法被实例化,而且一般作为基类使用,所以通常不需要定义构造函数(实际上,基类的构造函数也不会被派生类所继承)。

接口的作用

C++的接口最主要的作用(个人理解)就是作为基类使用。想象一下,如果某个C++的项目中已经声明好了很多很有用的接口,那么很多程序就可以使用接口即插即用,就比如计算机上的很多接口(这里单单举一个USB的接口作为例子),当我们需要使用鼠标的时候,可以通过将鼠标连接到USB接口即可,如果需要外接的音响,也可以通过USB接口来连接,这同一个接口却实现了不同的功能,因为鼠标和音响的实现的功能不同——就好比派生类对基类的方法(成员函数)的定义不同,因此实现的功能不同。

接口实现的实例代码

下面实例中,定义了一个抽象类作为接口,并在其不同的派生类中进行定义,得到不同的功能:

virtual returnType funcName( args ) = 0

纯虚函数实例代码

#include <iostream>
using namespace std;


class Fruit{
    public:
        // 纯虚函数
        virtual void setData(string n, int p) = 0;
        // 普通成员函数,用于访问protected中的变量
        void getData(){
            cout << name <<"价格:" << price << endl;
        }
    
    protected:
        string name;
        int price;
};

class Apple:public Fruit{
    public:
        // 定义继承自Fruit的纯虚函数,并显式制定重写override
        void setData(string n="苹果", int p=6) override {
            name = n;
            price = p;
        }

};

class Banana:public Fruit{
    public:
        void setData(string n="香蕉", int p=3) override{
            name = n;
            price = p;
        }
};

int main(){
    Apple a;
    a.setData();
    Banana b;
    b.setData();
    a.getData();
    b.getData();
    return 0;
}

代码编译运行后,得到输出:

苹果价格:6
香蕉价格:3

原文:C++ 接口的实现,及作用通俗理解方式

免责声明:内容仅供参考,不保证正确性。

相关推荐

  1. C++ 接口实现作用通俗理解方式

    2024-03-19 17:38:04       43 阅读
  2. 接口隔离原则实现方法具体应用

    2024-03-19 17:38:04       38 阅读
  3. C++中 greate/less 比较器模板实现原理作用

    2024-03-19 17:38:04       62 阅读
  4. extern”C作用注意事项

    2024-03-19 17:38:04       61 阅读
  5. C#实践作业1(类、接口、委托)

    2024-03-19 17:38:04       33 阅读
  6. MyBatis-注解方式实现接口声明方法

    2024-03-19 17:38:04       69 阅读
  7. conn.setAutoCommit()实现事务控制用法作用

    2024-03-19 17:38:04       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 17:38:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 17:38:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 17:38:04       87 阅读
  4. Python语言-面向对象

    2024-03-19 17:38:04       96 阅读

热门阅读

  1. 【代码随想录Day27】

    2024-03-19 17:38:04       41 阅读
  2. VUE3 自定义指令

    2024-03-19 17:38:04       43 阅读
  3. Leetcode--198

    2024-03-19 17:38:04       40 阅读
  4. Spring--设计模式

    2024-03-19 17:38:04       32 阅读
  5. UGUI源码分析与研究1-UGUI底层的实现原理

    2024-03-19 17:38:04       35 阅读
  6. 阿里巴巴中国站按关键字搜索工厂数据 API

    2024-03-19 17:38:04       36 阅读
  7. python代码截取任意页的pdf

    2024-03-19 17:38:04       45 阅读
  8. 数组的reduce 的使用和扁平化处理

    2024-03-19 17:38:04       36 阅读
  9. 在事务里发送普通消息引起的线上问题

    2024-03-19 17:38:04       47 阅读
  10. C# 通信断线重连问题说明与示例

    2024-03-19 17:38:04       46 阅读
  11. Springboot AOP

    2024-03-19 17:38:04       44 阅读