多态常见的面试题
-
什么是多态? 答
-
什么是重载、重写、重定义? 答:(上篇博客写了)
-
多态的实现原理? 答:虚函数表
-
inline函数可以是虚函数吗? 答:不能,因为inine函数没有地址,无法把地址放到虚函数表里
-
静态成员可以是虚函数吗? 答:不能,因为静态成员没有this指针,使用类型::成员函数的调用方式无法访问虚函数表,所以静态成员无法放进去虚函数表
-
析构函数可以是虚函数吗?什么场景下析构函数是虚函数? 答:可以,并且最好把基类的析构函数定义 成虚函数。
基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放。如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。所以,将析构函数声明为虚函数是十分必要的。 -
对象访问普通函数快还是虚函数更快? 答:首先如果是普通对象,是一样快的。如果是指针对象或者是 引用对象,则调用的普通函数快,因为构成多态,运行时调用虚函数需要到虚函数表中去查找
-
虚函数表在什么阶段产生,存在哪? 答:虚函数是在编译阶段就生成的,一般情况下存在静态区 的。
-
C++菱形继承的问题?虚继承的原理? 答:会造成数据冗杂和二义性。虚基表
-
什么是抽象类?抽象类的作用? 答:。抽象类强制重写了虚函数,另外抽象类体现出 了接口继承关系(纯虚函数)。
上篇博客都有所有问题的答案