面试题答案
一键面试- 条件简述:
- 父类中函数声明为虚函数,使用
virtual
关键字修饰。 - 子类重写父类的虚函数,函数签名(包括函数名、参数列表、返回类型)必须与父类虚函数完全一致(在C++11及以后,返回类型可以是协变的,即子类虚函数返回类型是父类虚函数返回类型的指针或引用类型的派生类型)。
- 通过基类指针或引用调用虚函数,才能实现多态。
- 父类中函数声明为虚函数,使用
- 代码示例:
#include <iostream>
// 父类
class Animal {
public:
// 定义虚函数
virtual void speak() {
std::cout << "Animal speaks" << std::endl;
}
};
// 子类
class Dog : public Animal {
public:
// 重写父类的虚函数
void speak() override {
std::cout << "Dog barks" << std::endl;
}
};
int main() {
Animal* animalPtr;
Dog dog;
// 基类指针指向子类对象
animalPtr = &dog;
// 通过基类指针调用虚函数,实现多态
animalPtr->speak();
return 0;
}
在上述代码中,Animal
类的speak
函数被声明为虚函数,Dog
类重写了speak
函数。通过Animal
类型的指针animalPtr
指向Dog
类对象,并调用speak
函数,实现了多态。