📅  最后修改于: 2023-12-03 14:39:38.778000             🧑  作者: Mango
在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来引用父类的虚函数。