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. android 各版本的区别

    三.Android 6.x 新增运行时权限概念 Android6.0或以上版本,用户可以完全控制应用权限.当用户安装一个app时,系统默认给app授权部分基础权限,其他敏感权限,需要开发者自己注意,当 ...

  2. 获取unity prefab的预览图像

    官方的api可以直接获取预览图像,如下所示: Tex=AssetPreview.GetAssetPreview(Object m)as Texture; 但是如果prefab是组合体的话(即一个pre ...

  3. scp命令需要指定端口时要紧跟在scp后

      问题来源:我本地是Ubuntu操作系统,有时需要更新一些文件到服务器.但是,为了安全起见我们都是将服务器的sshd端口修改的,通常不使用默认的22号端口. 如果我们使用scp命令时:scp upl ...

  4. Obj-C数组以及字符串拼接与分割

    本文转载至 http://mobile.51cto.com/iphone-392148.htm Obj-C只是增加了一点“特殊语料”的C语言,所以可以用printf()代替NSLog().但我们建议使 ...

  5. Javascript对数组的操作--转载

    在jquery中处理JSON数组的情况中遍历用到的比较多,但是用添加移除这些好像不是太多. 今天试过json[i].remove(),json.remove(i)之后都不行,看网页的DOM对象中好像J ...

  6. ASP跳出FOR循环

    由于ASP不能使用GOTO语句,我在FOR循环中加入一个FOR循环,若需要跳出,即退出最里面那个FOR循环. DEMO: <%dim aa = 0for i = 1 to 10    for j ...

  7. BZOJ1791: [Ioi2008]Island 岛屿

    BZOJ1791: [Ioi2008]Island 岛屿 Description 你将要游览一个有N个岛屿的公园. 从每一个岛i出发,只建造一座桥. 桥的长度以Li表示. 公园内总共有N座桥. 尽管每 ...

  8. 我的Android进阶之旅------>Android中AsyncTask源码分析

    在我的<我的Android进阶之旅------>android异步加载图片显示,并且对图片进行缓存实例>文章中,先后使用了Handler和AsyncTask两种方式实现异步任务机制. ...

  9. spring bean实例化的三种方式

    一.使用类的无参构造创建 配置文件 java代码 注意若类里面没有无参的构造,则会出现异常 二.使用静态工厂创建 配置文件 java代码 Factory类 测试类 结果 三.使用实例工厂 配置文件 1 ...

  10. 解压tar包中的指定文件

    解压<a 'tar');"="" href="http://asmboy001.blog.51cto.com/'#\'"" targe ...