C++ 多态核心解析:虚函数重写与动态绑定原理
多态分为编译时多态(静态)和运行时多态(动态)。编译时多态主要涉及函数重载和模板,而运行时多态则是本篇的重点。
运行时多态允许通过相同的接口调用不同的实现。例如,同样是'买票'行为,普通用户全价,学生优惠,军人优先。在代码层面,这意味着传入不同类型的对象,调用同一个函数名,却执行不同的逻辑。
多态的定义及实现条件
多态通常发生在继承体系下的类对象之间。要实现运行时多态,必须满足两个核心条件:
- 必须是基类的指针或引用调用虚函数。
- 被调用的函数必须是虚函数,且在派生类中完成了重写(Override)。
虚函数基础
在类成员函数前加 virtual 修饰符,该函数即成为虚函数。非成员函数不能声明为虚函数。
class Person {
public:
virtual void BuyTicket() {
cout << "买票 - 全价" << endl;
}
};
虚函数的重写
当派生类中存在一个与基类虚函数签名完全相同(返回值类型、函数名、参数列表一致)的函数时,称为重写。即使派生类未显式添加 virtual 关键字,只要继承了基类的虚函数,依然构成重写,但建议显式声明以保持规范。
namespace demo {
class Person {
public:
virtual void BuyTicket() {
cout << "买票 - 全价" << endl;
}
};
class Student : public Person {
public:
virtual void BuyTicket() {
cout << "买票 - 打折" << endl;
}
};
class Animal {
public:
virtual void talk() const {}
};
: Animal {
:
{
std::cout << << std::endl;
}
};
: Animal {
:
{
std::cout << << std::endl;
}
};
{
animal.();
}
}
{
demo::Cat cat;
demo::Dog dog;
demo::(cat);
demo::(dog);
;
}


