为了账号安全,请及时绑定邮箱和手机立即绑定
  • 如果父类中存在纯虚函数,而子类中并没有实现此函数,则子类便继承了父类中的纯虚函数,成为和父类一样的抽样类,都不可以实例化对象。

    查看全部
  • 在同时接了多个接口类的子类中,必须把接口类中所有的虚函数进行实现

    查看全部
    0 采集 收起 来源:[C++]接口类

    2020-02-27

  • 常见异常情况

    查看全部
    0 采集 收起 来源:[C++]异常处理

    2020-02-27

  • 异常处理关键字:

    1. try...catch..(try是尝试的意思,就是指尝试运行正常的逻辑;catch是捕获的意思,就是在try过程中出现异常,就会捕获异常,进行处理)

    2. throw(就是抛出异常的意思,抛出之后给catch进行捕获)

      这个基本思想就是主逻辑和异常处理逻辑进行分离!

    查看全部
    0 采集 收起 来源:[C++]异常处理

    2020-02-27

  • 本质上所有的操作系统都是一个死循环,不停的接收以及响应用户的处理和给予反馈
    真正的问题在于要分析清楚你所需要的所有资源的生命周期,包括内存的申请和释放,外设的创建和销毁等等。只要是你申请的资源,你必须确认他能够及时正确的得到销毁。
    还有一点是既然死循环必须要考虑何时和怎样释放CPU,例如利用信号量等待将当前任务/进程挂起,或者简单的利用wait/sleep之类函数主动释放。

    异常:程序在运行过程出现错误。

    异常处理:对有可能发生异常的地方做出预见性的安排。

    异常处理的基本思想:主逻辑与异常处理分离

    try与catch是一对多的关系。

    多态与异常处理的关系:Exception:HardwareErr,SizeErr,MemoryErr,NetworkErr



    查看全部
    0 采集 收起 来源:[C++]异常处理

    2020-02-27

  • 用typeid函数的时候要#include <typeinfo>

    查看全部
    0 采集 收起 来源:巩固练习

    2020-02-27

  • 这个地方可以看到typeid(*obj).name() 打印出来的是class Bird进一步说明了typeid(X).name() 是识别X的数据类型,并非识别指针。

    查看全部
  • typeid注意事项:

    1. type_id返回一个type_info对象的引用;

    2. 如果想通过基类的指针获得派生类的数据类型,基类必须带有虚函数;否则我们只能返回定义时所使用的的数据类型。

    3. 只能获取对象的实际类型。(只能判断当前对象是基类还是子类,不能识别当前指针是基类还是子类)


    查看全部
    0 采集 收起 来源:[C++]RTTI

    2020-02-27

  • dynamic_cast注意事项:

    只能应用与指针和引用的转换

    要转换的类型中必须包含虚函数

    转换成功返回子类的地址,失败返回NULL


    查看全部
    0 采集 收起 来源:[C++]RTTI

    2020-02-27

  • RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型(通俗话来说,就是能够知道这个基类指针纠结是被哪个派生类在用)

    1. dynamic_cast是将一个基类对象指针(或引用)转换到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理

    2. typeid(*obj).name()来确定派生类指针类型。if(typeid(*obj).name() == typeid(Bird))进行指针比对。Bird *bird = dynamic_cast<Bird *>(obj)进行基类指针向派生类指针的转换。

    查看全部
    0 采集 收起 来源:[C++]RTTI

    2020-02-27

  • 当类定义了虚函数之后,就会开拓一块特殊的内存VFtable虚函数表,虚函数表指针指向一个位置,这个位置中又放有各个虚函数实现的内存的指针。

    当基类中定义虚函数,子类继承并独特实现了同名虚函数后,虚函数表的指针就发生了变化,之后虚函数表中函数实现位置指针更加不同,就如图中的0xCCFF

    查看全部
  • 接口类Flyable,没有cpp文件,因为根本不需要去实现。 并且没有构造函数和析构函数,只有2个纯虚函数。

    构造函数是用来实例化(或者叫构造对象)用的, 而接口是不允许进行实例化的, 因此没有构造函数

    接口类只含有纯虚函数,接口类不能被实例化,但可以有指向接口类的指针,以便于操纵各个子类。


    查看全部
  • 接口类定义:仅含有纯虚函数的类(没有数据成员,仅有成员函数且均为纯虚函数)

    接口类更多的表达一种协议或能力


    查看全部
    0 采集 收起 来源:[C++]接口类

    2020-02-27

  • Animal ();仅仅是声明,类外要对其进行定义Animal::Animal(){};

    而Animal(){};是在类内定义

    这个地方Animal的默认构造函数不能只写成Animal();因为这样写只是申明了,没有定义它(之前我们是在Animal.cpp里面定义了的),要定义它必须要加{}!!!(虽然在定义里面我们什么都没做!)

    而在实例化对象Dog的时候,我们调用了这个默认的父类构造函数Animal(){} , 所以这里我们不加{}就会报错。

    但是在Dog类中,我们对默认构造函数写成Dog(); 程序却能够正常运行,是因为我没虽然没有定义Dog(),但是我们也没调用它。 我们调用的是函参的构造函数Dog(string name){},所以才没有报错。

    这个事情告诉我们,在没有多个文件的的时候,声明函数了一定要定义!!





    查看全部
    0 采集 收起 来源:单元练习

    2020-02-27

  • 虚函数一定要有函数体:比如

    virtial void eat(){cout << "Animal--" << m_strName << "-- eat" << endl;}

    如果没有后面的函数体,只写成:virtial void eat();计算机会认为这是一个纯虚函数,但是会报错,因为纯虚函数后面要写=0。

    查看全部
    0 采集 收起 来源:单元练习

    2020-02-27

举报

0/150
提交
取消
课程须知
本课程是C++初级课程 1、熟练掌握C++语言基础语法
老师告诉你能学到什么?
1、虚函数、虚析构函数、纯虚函数 2、抽象类和接口类 3、运行时类别异常 4、异常处理

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!