多态:
利用不同类似的方法处理不同类似的对象
笔记原因:
既然继承可以进行基类的方法覆盖,为什么还要引入多态呢?
解释原因:
继承
class Base {
public:
void func() {
std::cout << "Base::func()" << std::endl;
}
};
class Derived : public Base {
public:
void func() {
std::cout << "Derived::func()" << std::endl;
}
};
int main() {
Derived d;
Base* p = &d;
p->func();
return 0;
}
结果为Base::func()
引入多态(Virtual)
class Base {
public:
virtual void func() {
std::cout << "Base::func()" << std::endl;
}
};
class Derived : public Base {
public:
void func() {
std::cout << "Derived::func()" << std::endl;
}
};
int main() {
Derived d;
Base* p = &d;
p->func();
return 0;
}
结果为Derived::function()
结论:
未引入virtual,在编译时,编译器根据指针的类型(Base*)来决定调用哪个函数,静态绑定行为
引入多态,允许动态绑定,当一个基类成员被声明为virtual时,并且在派生类中被重写,通过基类指针或引用调用该函数时,实际调用的函数是根据对象的实际类型来确定的,而不是指针或引用的类型。