1.Cpp中的接口(抽象类)

  • 接口描述了类的行为和功能,而不需要完成类的特定实现接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 “= 0” 来指定的,如下所示,Box类就是一个抽象类:

        class Box{public:// 纯虚函数virtual double getVolume() = 0;private:int length;int width;int height;};
    
  • 设计抽象类(通常称为ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。因此,如果一个ABC的子类需要被实例化,则必须实现每个虚函数,这也意味着C++支持使用ABC声明接口。如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。可用于实例化对象的类被称为具体类

2.抽象类的实例如下

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

        // 基类Shape是个抽象类class Shape{public:// 提供接口框架的纯虚函数virtual int getArea() = 0;void setLength(int l){length = l;}void setWidth(int w){width = w;}protected:int length;int width;};// 派生类1class Rect: public Shape{public:int getArea(){return length * width;}};// 派生类2class Triangle: public Shape{public:int getArea(){return length * width / 2;}};int main(){Rect r;Triangle t;r.setLength(4);r.setWidth(5);cout << "矩形的面积是: " << r.getArea() << endl;t.setLength(4);t.setWidth(5);cout << "三角形的面积是: " << t.getArea() << endl;return 0;}
    
  • 从上面的实例中,可以看到一个抽象类是如何定义一个接口getArea(),两个派生类是如何通过不同的计算面积的算法来实现这个相同的函数。

3.设计策略

  • 面向对象的系统可能会使用一个抽象基类为所有的外部应用程序提供一个适当的、通用的、标准化的接口。然后,派生类通过继承抽象基类,就把所有类似的操作都继承下来。外部应用程序提供的功能(即公有函数)在抽象基类中是以纯虚函数的形式存在的,这些纯虚函数在相应的派生类中被实现。这个架构也使得新的应用程序可以很容易地被添加到系统中,即使是在系统被定义之后依然可以如此。

4.抽象类总结

  • 抽象类只能用在其他类的基类,不能定义抽象类的对象
  • 抽象类不能用于参数类型、函数返回值或显示转换的类型
  • 抽象类可以定义抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性

C++中的接口(抽象类)相关推荐

  1. java怎么给类中的私有变量赋值_Java学习笔记分享 如何理解接口抽象类和关键字...

    不知不觉中,千锋重庆学习Java已经半个月了,同学们感觉受益匪浅.有一个同学本来是软件编程专业基础却是意外的差,什么标识符.变量的命名规则.方法的定义.数组.面向对象的封装.继承.多态,还有接口.抽象 ...

  2. java画板抽象类_java 中的 抽象方法 抽象类 和 接口有啥瓜葛

    文章目录 什么是java中的抽象方法 抽象方法是一种特殊的方法: 它只有声明,而没有具体的实现 例如: abstract void eat(); 上面定义了一个方法 eat() ,有修饰关键词 abs ...

  3. c#中的接口的定議以及接口與抽象类的區別

    c#中的接口 目录 接口的定义 接口与抽象类 接口的的实现 接口的的多态性 一.接口的定义 定义:定义一个协定.实现接口的类或结构必须遵守其协定. 简单的说就是接口或者类之间交互时遵守的一个显示定义. ...

  4. php中接口与抽象类,php中的接口与抽象类及接口与抽象类的区别

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  5. 在Objective-C中创建一个抽象类

    我原来是一名Java程序员,现在使用Objective-C. 我想创建一个抽象类,但在Objective-C中似乎不可能. 这可能吗? 如果没有,我可以在Objective-C中获得一个抽象类的接近程 ...

  6. java中接口什么时候用_我什么时候应该在java中使用接口?

    在Java中精确使用接口的一个很好的例子将是理想的,适用于任何特定的规则. 看看丹以前所有的问题,他似乎只是逐字逐句地张贴家庭作业/考试问题. 令人惊讶的是,这些不是考试题或其他-今天才找到这个网站, ...

  7. 类与接口(三)java中的接口与嵌套接口

    ###一.接口 ##1. 接口简介 接口: 是java的一种抽象类型,是抽象方法的集合.接口比抽象类更加抽象的抽象类型. 接口语法: [修饰符] [abstract] interface 接口名 [e ...

  8. C++ 接口(抽象类)

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105020800 接 ...

  9. 面向对象编程语言中的接口(Interface)

    在大多面向对象的编程语言中都提供了Interface(接口)的概念.如果你事先学过这个概念,那么在谈到"接口测试"时,会不会想起这个概念来!?本篇文章简单介绍一下面向对象编程语言中 ...

最新文章

  1. send/recv阻塞和非租塞不同
  2. Java 异常处理中对于 finally 的一些思考
  3. oracle 细粒审核,oracle10g 细粒审计
  4. 查看一个结构体成员的方法
  5. 修改form_Vue通过阿里云oss的url连接直接下载文件并修改文件名
  6. NB-IOT物联网平台是如何工作的
  7. iOS开发中地图与定位
  8. python八大排序算法 间书_Python 八大排序算法速度比较
  9. RedHat 救援模式下排错
  10. sql语句学习之having用法
  11. upc 5215: Fence Building(欧拉定理/推导+OEIS)
  12. python-pandas-简单的excel表格按行去重
  13. 开放式激光振镜运动控制器:C++振镜矫正方法与实现
  14. Webpack5快速入门 (二) CSS相关loader的使用及兼容性处理 手把手带你打开前端工程化的大门
  15. 怎么正确使用代理IP
  16. 与计算机应用相关的公告,2015全国大学生数学建模与计算机应用竞赛报名通知...
  17. 世界危机四伏 难道2012真的存在
  18. CorelDRAW X7入门到精通视频教程 广告 名片 相册 包装设计
  19. 关于QQWry.dat格式
  20. 欧拉法及其他改进方法——Matlab实现

热门文章

  1. celery 停止执行中 task
  2. FF小股东美国起诉恒大 要求收回中国公司控制权
  3. Github Pages页面重定向到新网址,实现域名跳转
  4. 18.2 keepalived介绍
  5. webSocket浏览器握手不成功(解决)
  6. linux如何关闭防火墙
  7. 利用OnAnimatorove函数控制人物的移动
  8. Linux命令初识一
  9. 网络地址转换(PAT)
  10. git push origin与git push -u origin master的区别