C++中抽象类和多继承
C++中没有java中接口的概念,但是可以使用抽象类来模拟java中的接口。
工程上的多继承
工程开发中的多继承几乎是不被使用的
多继承带来的代码的复杂性,远远大于其代码带来的便利性。
多继承对代码的维护产生灾难性的后果
在设计上,任何有多继承的地方,都可以用单继承来代替
C++支持多继承,多继承有一个二义性。
面向抽象类编程这种能力需要提升。
函数指针:
函数类型
函数指针类型
定义一个函数指针,指向一个函数的入口地址
函数名称代表函数的入口地址,就是一个函数指针
对于函数名称是否取地址,效果是一样的,这是由于C历史兼容性的原因。
函数指针和数组指针出奇的相似
定义的类型C++编译器不会分配内存,可是如果是直接定义了函数指针,会直接分配内存的。
函数指针做函数参数:
指针做函数参数和函数指针做函数参数:
指针做函数参数的思想,调用任务的人和写任务的人通过函数指针做函数参数解耦合,这是回调函数的本质。
C++中通过多态的机制,在为每个类对象生成一个vptr指针,通过这个vptr指针找到一个虚函数表,通过虚函数表找到了对应执行函数的入口地址,从而实现了多态的扩充。
函数指针做函数的本质,提前进行了一种协议的约定,也就是参数个数和类型,以及参数返回值的类型。只要是满足这种类型指针的协议约定,就可以调用起来。
回调,就是,函数调用底层库,然后底层库在调用你写的代码,这个就是回调。
可以通过调用系统的API函数找到DLL库中的函数的入口地址,当然前提是要将这个DLL文件加载到内存中。
handle记录了函数运行的上下文信息。
底层库提供的是一种机制,而不是一种策略。
句柄的概念和上下文的概念
在底层库分配的内存,需要调用底层库的API进行释放
C++中使用多态解耦合,C语言中使用函数指针来解耦合。
不要轻易的增加接口,
C++中抽象类和多继承的更多相关文章
- java中抽象类是否可以继承实体类?
一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题. 题目如下:问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是可以继承实体类, ...
- 【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
接口可以继承接口.抽象类可以实现(implements)接口,抽象类可以继承具体类.抽象类中可以有静态的main方法. 问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是 ...
- c#中抽象类(abstract)和接口(interface)的相同点与区别
相同点: 1.都可以被继承 2.都不能被实例化 3.都可以包含方法声明 4.派生类必须实现未实现的方法 区别: 1.抽象基类可以定义字段.属性.方法实现.接口只能定义属性.索引器.事件.和方法声明,不 ...
- 转载:详细解析Java中抽象类和接口的区别
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...
- Java中抽象类和接口的区别
转载自:http://dev.yesky.com/436/7581936.shtml 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种 ...
- 详细解析Java中抽象类和接口的区别
在Java语言中, abstract class 和interface 是支持抽象类定 义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和in ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- Java中抽象类和接口的用法和区别
一.抽象类 1.抽象类 包含一个抽象方法的类就是抽象类 2.抽象方法 声明而未被实现的方法,抽象方法必须使用abstract关键词字声明 public abstract class People { ...
- Java中抽象类和接口区别
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...
随机推荐
- /bin/sh^M:bad interpreter: No such file or directory
bash脚本:/bin/sh^M:bad interpreter: No such file or directory dos2unix 实际上就是把文本文件中面的^M删除 用SHELL 写了一个 ...
- Spring Cloud 微服务五:Spring cloud gateway限流
前言:在互联网应用中,特别是电商,高并发的场景非常多,比如:秒杀.抢购.双11等,在开始时间点会使流量爆发式地涌入,如果对网络流量不加控制很有可能造成后台实例资源耗尽.限流是指通过指定的策略削减流量, ...
- Lumen开发:lumen源码解读之初始化(1)——app实例
版权声明:本文为博主原创文章,未经博主允许不得转载. 有些注释来着原文的百度翻译,可以有些难理解或者奇怪,我后面会根据自己的理解做调整的哈!!!不喜勿喷,层主英语不过关... 先来看看入口文件publ ...
- cocos2dx使用cocostudio导出的animation
local uilocal function createLayerUI() if not ui then ui=cc.Layer:create(); createLayerUI=nil; end r ...
- Jquery实现loading效果
需要引入jquery和bootstrap相关包,然后把下面的代码复制进去就可以了: <div class="modal fade" id="loadingModal ...
- Google的Guava之IO升华
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luo201227/article/details/36413279 程序员在开发过程中,使用文件的几 ...
- ALV 表头 ADD_TEXT
[转自http://lz357502668.blog.163.com/blog/static/16496743201252891452493/] CALL METHOD valid_reference ...
- 【logback】认识logback
一. Reference:http://www.cnblogs.com/yongze103/archive/2012/05/05/2484753.html 1. Logback为取代log4j而生,l ...
- HTML哪些是块级元素,哪些是行内元素、
块级元素:块级大多为结构性标记 <address>...</adderss> <center>...</center> 地址文字 <h1> ...
- LeetCode:字母异位词分组【16】
LeetCode:字母异位词分组[16] 题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", &quo ...