-
接口类不用实现,所以没有.cpp文件; 没有构造函数和析构函数 只有纯虚函数查看全部
-
仅含有纯虚函数的类称为接口类: 1、一个类,只含有成员函数,不含有数据成员; 2、并且成员函数都是纯虚函数。查看全部
-
含有纯虚函数的类叫做抽象类!!!查看全部
-
纯虚函数:virtual XXXXXXX()=0查看全部
-
虚函数产生函数的覆盖(虚函数表记录函数的地址发生变化); 继承关系下,同名函数之间产生隐藏。查看全部
-
动态多态有产生内存泄漏的隐患查看全部
-
宏定义是为了防止重复包含 #ifndef #define #endif查看全部
-
RTTI:运行时类型识别 typeid(*obj).name()打印出obj这个指针指向的实际的对象类型 对类型进行比对:if{typeid(*obj)==typeid(Bird)} dynamic_cast< >转换类型,< >中是要转化成为的类型,例如:Bird *bird = dynamic_cast<Bird *>(obj);(obj)转化为Bird * 类型 dynamic_cast用法的注意事项:只能应用于指针和引用之间的转换,即< >中只能是某一类型的指针或者是某一类型的引用;要转换的类型中,必须包含虚函数;转换成功返回子类的地址,失败返回NULL typied的注意事项:type_id 返回一个type_info对象的引用;如果想通过基类的指针获得派生类的数据类型,基类必须带有虚函数;只能获取对象的实际类型查看全部
-
使用typeid需要#include <typeinfo>,否则报错查看全部
-
Flyable*p=new Bird(); cout<<typeid(p)<<endl;//打印出class Flyable* cout<<typeid(*p)<<endl;//打印出class Bird查看全部
-
RTTI:运行时类型识别 typeid(*obj).name()打印出obj这个指针指向的实际的对象类型 对类型进行比对:if{typeid(*obj)==typeid(Bird)} dynamic_cast< >转换类型,< >中是要转化成为的类型,例如:Bird *bird = dynamic_cast<Bird *>(obj);(obj)转化为Bird * 类型查看全部
-
虚析构函数适用场景是:继承关系存在,当使用父类指针指向堆中申请的子类对象,需要销毁子类及父类对象时,通过虚析构函数能使得delete 父类指针之前,执行子类对象的虚析构函数,进而销毁子类对象,达到保护内存的目的。 因此关键点就是父类指针指向堆中申请的子类对象,如果没有使用new申请子类对象,就不需要考虑虚析构函数。查看全部
-
虚函数表指针占据的是每个对象的前四个内存单元 有虚函数时,对象中首先存虚函数表指针,再存数据成员地址,没有虚函数时,首先存的是数据成员的地址。<br> 有虚函数时,先使用指针 p 指向对象,访问的虚函数表指针,(*p)取得的是虚函数表地址,再使 p++ 就指向了数据成员,(*p)就能取得数据成员的值。查看全部
-
覆盖:父类和子类定义了同名虚函数,在子类的虚函数表中,子类的虚函数地址就会把原来的父类的虚函数地址给覆盖了。 隐藏:父类和子类出现了同名函数,父类的同名函数将进行隐藏。查看全部
-
try......catch(){}查看全部
举报
0/150
提交
取消