C++中没有java中接口的概念,但是可以使用抽象类来模拟java中的接口。

工程上的多继承

工程开发中的多继承几乎是不被使用的

多继承带来的代码的复杂性,远远大于其代码带来的便利性。

多继承对代码的维护产生灾难性的后果

在设计上,任何有多继承的地方,都可以用单继承来代替

C++支持多继承,多继承有一个二义性。

面向抽象类编程这种能力需要提升。

函数指针:

函数类型

函数指针类型

定义一个函数指针,指向一个函数的入口地址

函数名称代表函数的入口地址,就是一个函数指针

对于函数名称是否取地址,效果是一样的,这是由于C历史兼容性的原因。

函数指针和数组指针出奇的相似

定义的类型C++编译器不会分配内存,可是如果是直接定义了函数指针,会直接分配内存的。

函数指针做函数参数:

指针做函数参数和函数指针做函数参数:

指针做函数参数的思想,调用任务的人和写任务的人通过函数指针做函数参数解耦合,这是回调函数的本质。

C++中通过多态的机制,在为每个类对象生成一个vptr指针,通过这个vptr指针找到一个虚函数表,通过虚函数表找到了对应执行函数的入口地址,从而实现了多态的扩充。

函数指针做函数的本质,提前进行了一种协议的约定,也就是参数个数和类型,以及参数返回值的类型。只要是满足这种类型指针的协议约定,就可以调用起来。

回调,就是,函数调用底层库,然后底层库在调用你写的代码,这个就是回调。

可以通过调用系统的API函数找到DLL库中的函数的入口地址,当然前提是要将这个DLL文件加载到内存中。

handle记录了函数运行的上下文信息。

底层库提供的是一种机制,而不是一种策略。

句柄的概念和上下文的概念

在底层库分配的内存,需要调用底层库的API进行释放

C++中使用多态解耦合,C语言中使用函数指针来解耦合。

不要轻易的增加接口,

C++中抽象类和多继承的更多相关文章

  1. java中抽象类是否可以继承实体类?

    一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题. 题目如下:问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是可以继承实体类, ...

  2. 【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?

    接口可以继承接口.抽象类可以实现(implements)接口,抽象类可以继承具体类.抽象类中可以有静态的main方法. 问:  抽象类是否可继承实体类 (concrete class) 答: 抽象类是 ...

  3. c#中抽象类(abstract)和接口(interface)的相同点与区别

    相同点: 1.都可以被继承 2.都不能被实例化 3.都可以包含方法声明 4.派生类必须实现未实现的方法 区别: 1.抽象基类可以定义字段.属性.方法实现.接口只能定义属性.索引器.事件.和方法声明,不 ...

  4. 转载:详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

  5. Java中抽象类和接口的区别

    转载自:http://dev.yesky.com/436/7581936.shtml 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种 ...

  6. 详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定 义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和in ...

  7. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  8. Java中抽象类和接口的用法和区别

    一.抽象类 1.抽象类 包含一个抽象方法的类就是抽象类 2.抽象方法 声明而未被实现的方法,抽象方法必须使用abstract关键词字声明 public abstract class People { ...

  9. Java中抽象类和接口区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

随机推荐

  1. cordova ios升级插件

    org.ssgroup.sope.cordova.upgrade 支持强制升级与选择升级 插件已经开源在https://github.com/shenshouer/org.ssgroup.sope.c ...

  2. vue-cli (vue脚手架)

    vue-cli(脚手架):它可以自动生成目录 1.在网速不佳的情况下可以安装cnpm(淘宝镜像)如果网速快可以不用安装cnpm直接进行下一步操作 第一步:在命令行执行(全局安装cnpm) npm in ...

  3. tomcat 编码问题

    默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找到如下代码:    < Connector port="8080 ...

  4. git克隆远程分支

    $ git branch –r 查看远程branch信息 $ git checkout origin/dev检出远程分支 $ git branch -a 查看所有分支,包括本地和远程 可以使用chec ...

  5. 15.Django添加一个功能模块的步骤(和SpringMVC类比)

    这里介绍如何在Django里新建一个模块,这个例子还是最简单的例子 通过浏览器访问 http://localhost:8000/hello/然后返回一个欢迎页 我是做java web出身的,这里用py ...

  6. BAPI_SALESORDER_CREATEFROMDAT2 创建退货SO

    BAPI_SALESORDER_CREATEFROMDAT2创建退货订单时,会出现以下错误:不允许业务对象 BUS2032 和销售凭证类别 H 的组合. 解决办法: 采用/原BAPI的内嵌BAPI: ...

  7. windows10 Python2和Python3共存

    通过配置环境变量,达到使用python命令启动python2,使用python3命令启动python3,pip启动pip2, pip3启动pip3的目的,互不影响. 1.安装python2.7  安装 ...

  8. 常见数据挖掘算法的Map-Reduce策略(2)

           接着上一篇文章常见算法的mapreduce案例(1)继续挖坑,本文涉及到算法的基本原理,文中会大概讲讲,但具体有关公式的推导还请大家去查阅相关的文献文章.下面涉及到的数据挖掘算法会有:L ...

  9. python-2 什么是函数

    函数是什么? 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 形参变量只有在被调用时才 ...

  10. python3 批量缩放图片为iphone5的640*1136以下

    try: from PIL import Image, ImageDraw, ImageFont, ImageEnhance except ImportError: import Image, Ima ...