📜  C ++ |虚函数|问题3(1)

📅  最后修改于: 2023-12-03 14:39:38.778000             🧑  作者: Mango

C++ | 虚函数 | 问题3

在C++中,当一个类中至少有一个虚函数时,就称这个类为虚类。虚类不能被实例化,只能被继承。而子类中如果想要重写父类的虚函数,则需要加上关键字override

本篇文章将着重介绍虚函数的一个常见问题,即在子类中如何调用父类的虚函数。

问题描述

在C++中,假设有一个父类BaseClass和一个子类SubClass,其中BaseClass中有一个虚函数virtual void print(),而在SubClass中需要重写print()函数,并且在子类的函数中需要调用父类的print()函数。

解决方案
方法一:使用作用域限定符

在子类的成员函数中,我们可以使用BaseClass::print()来调用父类的虚函数。具体示例如下:

#include <iostream>
using namespace std;

class BaseClass {
public:
    virtual void print() { cout << "This is BaseClass." << endl; }
};

class SubClass : public BaseClass {
public:
    virtual void print() override {
        cout << "This is SubClass.";
        BaseClass::print(); //调用父类的print()函数
    }
};

int main() {
    SubClass s;
    s.print();
    return 0;
}

输出结果:

This is SubClass.This is BaseClass.
方法二:使用别名

我们也可以在子类的定义中,使用别名来引用父类的虚函数。具体示例如下:

#include <iostream>
using namespace std;

class BaseClass {
public:
    virtual void print() { cout << "This is BaseClass." << endl; }
};

class SubClass : public BaseClass {
public:
    using BaseClass::print; //使用别名

    virtual void print() override {
        cout << "This is SubClass.";
        print(); //调用父类的print()函数
    }
};

int main() {
    SubClass s;
    s.print();
    return 0;
}

输出结果:

This is SubClass.This is BaseClass.
总结

在C++中,子类调用父类的虚函数,有两种常见的方法:使用作用域限定符和使用别名。这里需要注意的是,在子类中使用别名时,需要先在类的定义中使用using来引用父类的虚函数。