-
实例化子类时,也会有虚函数指针列表,如果仍然使用继承自父类的方法,则入口函数地址和父类的相同
如果子类中重新定义了虚函数的方法,子类的虚函数表中指向的函数入口地址是自己定义的而不是父类的,相当于覆盖了父类的方法
父类指针指向子类对象 ,则通过子类对象的虚函数指针找到虚函数表,与父类同样多的偏移量,找到子类对象的函数入口
查看全部 -
虚函数表指针
定义了virtual函数,实例化一个基类对象时,实例对象中存储了成员变量和虚函数表指针。
虚函数指针指向一个虚函数表,虚函数表也占一定的空间,通过基类实例化的所有实例都共用一个虚函数表。
虚函数表存储函数指针,存储入口函数地址。
调用时候,先找到虚函数指针,再找到虚函数表,通过相应的偏移找到虚函数入口地址再找到相应的执行函数
查看全部 -
指针指向对象--对象指针指着指向函数--函数指针。函数的本质:一部分二进制代码,写在内存中;与变量指针类似,都是由4个基本内存单元组成,存储一个地址;函数指针指向函数开头,顺序执行完,指针指向函数结尾,并通过指令返回值;执行某个函数,获取指针地址,执行入口函数,再返回相应的值。
查看全部 -
Vitrual 使用限制4
不能修饰构造函数
会造成编译错误
查看全部 -
virtual使用限制3
不能修饰内联函数
造成忽略inline,变成了虚函数
查看全部 -
Virtual使用限制2
不能修饰静态成员函数
静态成员函数和类同时共存的
查看全部 -
virtual 使用限制1
不能是全局函数,必须是某个类的成员函数
查看全部 -
借助父类指针销毁子类对象时,只执行父类的析构函数,造成内存泄漏
查看全部 -
动态多态
派生类中多定义了数据成员,派生类构造函数中实例化了那个数据成员,分配了内存空间, 在析构函数中释放了空间
查看全部 -
头文件中定义过了类
此文件中定义了类对象的成员方法的具体实现
查看全部 -
定义宏定义,避免重复定义
查看全部 -
静态多态(早绑定):
程序在编译阶段就确定了调用哪个函数执行
动态多态(晚绑定):
如果不定义virtual 调用的都是父类的方法
可在父类实现多态函数的成员函数前添加修饰词virtual, 使其成为虚函数,子类成员函数也可加上virtual,但不是必要的。
查看全部 -
什么是多态
查看全部 -
面向对象三大特征
查看全部 -
重载 1 相同范围 2 函数名相同 3 参数不同 4 virtual可有可无 覆盖 1 父类子类 2 函数名相同 3 参数相同 4 基类必须有virtual关键字 隐藏 1 父类子类 2 无virtual 3 函数名相同 4 参数可同可不同查看全部
举报