-
纯虚函数抽象类:
1、纯虚函数定义:没有函数体且在定义时另其为0的函数
virtual double calcArea() { return 0; }//虚函数 virtual double calcPerimeter()= 0;//纯虚函数
2、纯虚函数在虚函数表中的实现
在虚函数表中将其字段赋值为0
3、抽象类的概念
含有纯虚函数的类叫做抽象类,抽象类无法实例化对象
查看全部 -
虚函数表
对象大小:在类实例化出的对象当中,其数据成员(不包括成员函数)所占据的内存大小
对象的地址:对象所占第一个内存单元的地址
对象成员的地址:当用类实例化对象,这个对象可能会有一个或多个数据成员,每个成员所占据的地址就是这个对象的成员地址。
虚函数表指针:在具有虚函数的情况下,实例化对象时,该对象第一块内存中所存储的是一个指针,这个指针就是虚函数表的指针
查看全部 -
虚函数及虚析构函数的原理:
1、函数指针的概念:
指向函数的指针,函数的本质是一段二进制代码,通过指针指向这段二进制代码的开头
原理:通过虚函数表来区分,虚函数表也占内存空间
2、函数的覆盖和隐藏:
当父类和子类出现了同名函数时,称之为函数的隐藏
如没有在子类里定义同名虚函数,则会在子类的虚函数表总写入父类的相应函数的入口地址,如果在子类当中也定义了同名虚函数,则会在子类的虚函数表中把原来的父类的虚函数的函数地址覆盖掉。
3、虚函数解决内存泄露问题的理论前提:
通过父类的虚函数表指针寻找子类的虚析构函数指针执行
执行完子类的析构函数就会执行父类的析构函数。
查看全部 -
virtual关键字在修饰函数时候的限制:
1、不能修饰普通函数 ,不能是全局函数 ,可为类的成员函数
2、static修饰的静态成员函数不能被virtual修饰
3、不能修饰内联函数,因为若修饰了编译时会忽略inline关键字,认为它是一个纯虚函数
4、不能修饰构造函数
查看全部 -
二、虚函数
1、多态的概念
指相同对象收到不同消息或不同对象收到相同消息时产生的不同的动作。
2、静态多态(早绑定)
即函数重载,同名函数提前设置好了不同参数进行传入
2、动态多态(晚绑定)
必须以封装和继承为基础
达到对不同的对象下达相同指令另其做不同处理的目的
解决方式:用virtual关键字修饰要下达指令的函数,使其成为虚函数
查看全部 -
1、面向对象的三大特征:
封装、多态、继承
查看全部 -
队列--栈----链表(线性)----树----图
查看全部 -
异常与多态的紧密联系:
Exception定义为接口类,可捕捉所有抛出的子类对象。
查看全部 -
常见的异常情况:
查看全部 -
不要害怕异常处理这个知识点,从解决问题的角度出发研究。
查看全部 -
typeid 注意事项:
查看全部 -
dynamic_cast 注意事项:
查看全部 -
RTTI:运行时类型识别
常规使用案例。
查看全部 -
解答了上一个虚析构函数的疑问。
查看全部 -
不明白为什么B是正确的,有人能举个例子吗?
查看全部
举报