C 的虚函数是一种特殊的成员函数,用于实现多态性。虚函数允许在基类中声明一个函数,在派生类中根据需要进行重写,并通过基类指针或引用来调用派生类对象的特定实现。
①虚函数的声明
在基类中,我们可以使用关键字virtual来声明一个虚函数。
代码语言:javascript复制class Base {
public:
virtual void show() {
cout << "This is the Base class." << endl;
}
};
②多态性
通过将一个基类的指针或引用指向其派生类的对象,可以实现多态性。
通过将基类指针ptr
指向派生类对象derivedObj
,我们可以通过调用虚函数show()
来实现多态性。运行时会根据实际对象的类型选择正确的实现。
Base* ptr; // 基类指针
Derived derivedObj; // 派生类对象
ptr = &derivedObj; // 将基类指针指向派生类对象
// 调用虚函数,根据对象的实际类型执行不同的实现
ptr->show();
③派生类重写虚函数
派生类可以重写基类中的虚函数,以提供自己的实现。重写的函数必须具有相同的名称、返回类型和参数列表。
代码语言:javascript复制class Derived : public Base {
public:
void show() override {
cout << "This is the Derived class." << endl;
}
};
④纯虚函数
虚函数也可以被声明为纯虚函数,即没有默认实现的虚函数。纯虚函数通过在声明中使用= 0
来标识。包含纯虚函数的类称为抽象类,它不能实例化,只能作为基类来派生其他类。
class AbstractBase {
public:
virtual void show() = 0; // 纯虚函数
};
⑤注意
- 虚函数只能在类的成员函数中使用。
- 虚函数使用动态绑定,即运行时将根据对象的实际类型选择正确的函数实现。
- 构造函数不能是虚函数。
- 静态成员函数不能是虚函数。
- 虚函数可以被继承,派生类可以选择是否重写虚函数。