1. 什么是多态?
-
🐧 通俗来说 就是多种形态,具体点就是,完成某个行为,不同对象去完成时会产生不同的状态。
-
静态多态:程序编译期间确定了程序的行为(函数重载)
-
动态多态:程序运行期间确定根据具体拿到的类型确定程序的具体行为,调用具体函数
2. 构成多态的两个必要条件
⚽① 必须通过基类的指针或者引用调用虚函数
⚽② 被调用的函数必须是虚函数,派生类必须完成对基类的虚函数重写
3. 为什么析构函数建议是虚函数 ?
2. 什么是重载、重写、重定义
- 重载🍎
两个函数在同一作用域,函数名相同,参数不同、
class MyClass {
public:
void display(int i) {
std::cout << "Integer: " << i << std::endl;
}
void display(double d) {
std::cout << "Double: " << d << std::endl;
}
void display(int i, double d) {
std::cout << "Integer and Double: " << i << ", " << d << std::endl;
}
};
-
重写(覆盖)🍎
两个函数分别在 基类和派生类的作用域;函数名、参数、返回值类型都相同(协变和析构函数除外);两个函数必须是虚函数; -
重定义🍎
两个函数分别在基类和派生类的作用域;函数名相同;两个基类和派生类的同名函数,不构成重写就是重定义;
3. 多态的实现原理?
⚽ 要达到多态,必须满足两个条件:①虚函数的覆盖;②对象的指针或者是引用调用虚函数;
🏀 满足多态的函数调用,不是在编译时确定的,是运行起来以后到对象中去寻找的;
4. 虚函数表是在什么阶段生成的,存在哪的?
🐧 虚函数表是在编译阶段就生成的,一般情况下存在代码段(常量区)的。