面试题答案
一键面试基本步骤
- 定义基类:在基类中定义虚函数。虚函数使用
virtual
关键字声明,它提供了一种接口规范,子类可以重写该函数以实现不同的行为。 - 定义子类:子类继承基类,并根据需求重写基类中的虚函数。重写后的函数应与基类中的虚函数具有相同的函数签名(函数名、参数列表和返回类型)。
- 使用指针或引用:在使用时,通过基类的指针或引用指向子类对象。这样,在调用虚函数时,会根据指针或引用实际指向的对象类型来决定调用哪个版本的虚函数,从而实现多态。
示例代码
#include <iostream>
// 基类
class Shape {
public:
// 虚函数
virtual void draw() const {
std::cout << "Drawing a shape." << std::endl;
}
};
// 子类1
class Circle : public Shape {
public:
// 重写虚函数
void draw() const override {
std::cout << "Drawing a circle." << std::endl;
}
};
// 子类2
class Rectangle : public Shape {
public:
// 重写虚函数
void draw() const override {
std::cout << "Drawing a rectangle." << std::endl;
}
};
int main() {
// 基类指针
Shape* shapePtr;
// 指向Circle对象
shapePtr = new Circle();
shapePtr->draw();
// 指向Rectangle对象
shapePtr = new Rectangle();
shapePtr->draw();
// 释放内存
delete shapePtr;
return 0;
}
在上述代码中,Shape
类定义了虚函数 draw
。Circle
和 Rectangle
类继承自 Shape
类并重写了 draw
函数。在 main
函数中,通过 Shape
类的指针分别指向 Circle
和 Rectangle
对象,并调用 draw
函数,实际调用的是对应子类重写后的 draw
函数,从而实现了多态。