-
基类是抽象类,如果派生类中没有给出了基类纯虚函数的实现,派生类也是抽象类
查看全部 -
抽象类的子类只有把抽象类当中的所有纯虚函数都做了实现,那么这个子类才可以实例化对象。
查看全部 -
抽象类无法实例化对象
查看全部 -
抽象类定义
查看全部 -
没有函数体,后面加“=0”的函数叫纯虚函数。
查看全部 -
虚函数表指针占据前四个内存单元。
查看全部 -
如果我们定义了虚析构函数,同样会在实例化对象的时候,会自动产生一个虚函数表,并且在对象中会有一个虚函数表指针。
查看全部 -
当shape一个成员都没有的时候这个类也是可以实例化的,它实例化后作为一个对象必须标记自己的存在。C++对于一个数据成员都没有的情况,用一个内存单元去标记它。如果这个类有数据成员就不需要这个额外的内存单元标记它的存在。
查看全部 -
异常处理:
利用try...catch...与throw来进行异常处理
根据函数调用关系将日常处理抛给上层,若最上层不能处理则抛给操作系统,操作系统进行干预。
try和catch的关系可以是一对多的
常见的异常:数组下标越界、除数为0、内存不足
查看全部 -
RTTI:运行时动态识别
利用typeid()函数及bynamic_cast来实现
typeid(指针名).name 读取指针当前所指对象
目标类型名 *指针=dynamic_cast<目标类型名 *>(代转化指针名) 进行类型转化
dynamic_cast的使用注意事项:
a、只能用于指针和引用之间的类型转换
b、要转换的类型当中必须包含虚函数
c、转换成功返回子类的地址,失败返回NULL
typeid的注意事项:
a、type_id返回一个type_info对象的引用
b、如果想通过基类的指针获得派生类的数据类型,基类必须带有虚函数
c、只能获取对象的实际类型
查看全部 -
virtual不能修饰普通函数,不能修饰全局函数,virtual修饰的函数必须是某个类的成员函数
不能修饰静态成员函数
不能修饰内联函数
不能修饰构造函数
查看全部 -
如果delete后面跟着一个父类指针,那么它只会执行父类的析构函数,造成内存泄漏;如果跟着的是一个子类的指针,那么他会执行子类和父类的析构函数
查看全部 -
正确释放内存应该用虚析构函数
查看全部 -
多态 Shape *p=new Circle; p->calcArea(); 如果父类方法不加virtual,则指针调用父类的方法 父类方法加virtual,指针调用子类的方法(子类virtual关键字系统会默认添加)
查看全部 -
1、接口类的概念
仅含有纯虚函数的类称为接口类
接口类通常用来表达一种能力或协议(父类一般更适合为接口类)
查看全部
举报