MST

星途 面试题库

面试题:C++中多态的基础实现

请简述C++中通过虚函数和指针或引用实现多态的基本步骤,并给出一个简单示例代码。
42.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

基本步骤

  1. 定义基类:在基类中定义虚函数。虚函数使用 virtual 关键字声明,它提供了一种接口规范,子类可以重写该函数以实现不同的行为。
  2. 定义子类:子类继承基类,并根据需求重写基类中的虚函数。重写后的函数应与基类中的虚函数具有相同的函数签名(函数名、参数列表和返回类型)。
  3. 使用指针或引用:在使用时,通过基类的指针或引用指向子类对象。这样,在调用虚函数时,会根据指针或引用实际指向的对象类型来决定调用哪个版本的虚函数,从而实现多态。

示例代码

#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 类定义了虚函数 drawCircleRectangle 类继承自 Shape 类并重写了 draw 函数。在 main 函数中,通过 Shape 类的指针分别指向 CircleRectangle 对象,并调用 draw 函数,实际调用的是对应子类重写后的 draw 函数,从而实现了多态。