MST

星途 面试题库

面试题:C++中父类虚函数与子类多态实现的基本条件

在C++中,简述父类虚函数与子类多态实现需要满足哪些条件?请结合代码示例说明,代码要求至少包含一个父类、一个子类,父类有虚函数,子类重写该虚函数,并通过基类指针调用该虚函数实现多态。
15.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 条件简述
    • 父类中函数声明为虚函数,使用virtual关键字修饰。
    • 子类重写父类的虚函数,函数签名(包括函数名、参数列表、返回类型)必须与父类虚函数完全一致(在C++11及以后,返回类型可以是协变的,即子类虚函数返回类型是父类虚函数返回类型的指针或引用类型的派生类型)。
    • 通过基类指针或引用调用虚函数,才能实现多态。
  2. 代码示例
#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函数,实现了多态。