-
覆盖:父类和子类定义了同名虚函数,在子类的虚函数表中,子类的虚函数地址就会把原来的父类的虚函数地址给覆盖了。 隐藏:父类和子类出现了同名函数,父类的同名函数将进行隐藏。查看全部
-
如果子类中有相同功能的函数 则 其虚函数表中指向函数的指针 就和 父类的不同了 他是指向自己的虚函数地址(此时也就对父类函数进行了覆盖)查看全部
-
在实例化子类的时候由于 他继承了父类的虚函数 所以 也会相应的分配一个虚函数表指针 【此处的虚函数表 和父类分配的虚函数表不一样,但是 如果子类没有相同功能的虚函数 而要引用父类的虚函数 此时 子类的虚函数表中指向虚函数的指针和父类指向虚函数的指针是相同的地址】 {指针的值 也就是指向函数的首地址的值}查看全部
-
父类实例化出来的对象 虚函数表 都是一样的查看全部
-
形参:父类的指针<--->传入子类的指针查看全部
-
RTTI(Run Time Type Identification):运行时类型识别 dynamic_cast注意事项: 1、只能应用于指针和引用的转换; Bird *bird = dynamic_cast<Bird *>(obj); bird->foraging(); 2、要转换的类型中必须包含虚函数(多态类型); 3、转换成功会返回子类的地址,失败返回NULL。 typeid注意事项: typeid(*obj).name; if(typeid(*obj) == typeid(Bird)) 1、type_id返回一个type_info对象的引用; 2、如果想通过基类的指针获得派生类的数据类型,基类必须带有虚函数(多态类型); 3、只能获取对象的实际类型,无法判断指针的实际类型。查看全部
-
仅含有纯虚函数的类称为接口类。 注:没有数据成员,只有成员函数且成员函数都是纯虚函数。查看全部
-
含有纯虚函数的类叫做抽象类。抽象类无法被实例化,并且抽象列的子类只有把抽象类的纯虚函数都做了实现才可被实例化。查看全部
-
虚析构函数作用:以防内存泄漏 注:当利用继承且利用指针从堆中申请内存时要注意使用虚析构函数,以免子类中的堆内存没有释放而导致内存泄漏。查看全部
-
使用virtual虚函数的限制: 1、普通函数不能是虚函数 2、静态成员函数不能是虚函数 3、内联函数不能是虚函数(因为系统会因为virtual而忽略内联关键字inline) 4、构造函数不能是虚函数查看全部
-
父类可以通过指针改变子类的值。查看全部
-
父类指向子类查看全部
-
因此为了避免以后运用进行内存泄漏,就自动默认 的在析构函数前面加上 virtual查看全部
-
虚析构函数是为了避免从堆中申请的对象 内存泄漏 ,如果不是从堆中申请的内存则是查看全部
-
将父类的变为虚析构函数,子类也就相应的变为了虚析构函数了,这样做是为了 防止内存泄漏查看全部
举报
0/150
提交
取消