zoukankan      html  css  js  c++  java
  • C++中抽象类和多继承

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

    工程上的多继承

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

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

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

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

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

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

    函数指针:

    函数类型

    函数指针类型

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

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

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

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

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

    函数指针做函数参数:

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

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

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

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

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

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

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

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

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

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

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

    不要轻易的增加接口,

  • 相关阅读:
    HTML Rendering Error
    PyCharm将选中的内容加上引号
    Scrapy中的Request和日志分析
    PyCharm关闭按两次Shift进入搜索框的功能
    博客园更换模板的链接
    Scrapy的Spider类和CrawlSpider类
    Scrapy安装和简单使用
    计算π的近似值
    Python用pip安装第三方库时换源下载
    网页解析 -- bs4 和 xpath 的简单使用
  • 原文地址:https://www.cnblogs.com/andyniu/p/7833938.html
Copyright © 2011-2022 走看看