重写必须满足的条件:
1. 基类中的函数使用virtual修饰,即基类中的函数为虚函数;
2. 派生类中与基类中的这个virtual函数要有相同的函数原型(即:返回类型相同、函数名相同、形参列表相同);
下面我们看个简单的程序:
1. 基类中的函数使用virtual修饰,即基类中的函数为虚函数;
2. 派生类中与基类中的这个virtual函数要有相同的函数原型(即:返回类型相同、函数名相同、形参列表相同);
下面我们看个简单的程序:
#include <iostream>
using std::cout;
using std::endl;
class Person
{
public:
virtual void Study()
{
cout << "这是基类中的方法" << endl;
}
};
class Man : public Person
{
public:
virtual void Study()
{
cout << "这是派生类中的方法" << endl;
}
};
int main(void)
{
Person *p = new Man;
p -> Study(); // 输出结果:这是派生类中的方法
return 0;
}Man类中的Study()函数对Person类中的Study()函数进行了重写。
也许有些人认为:返回类型可以不同,这个我们可以做个测试,就是将Man类中的Study()方法改为返回值为int类型:
virtual void Study()
{
cout << "这是派生类中的方法" << endl;
return 0;
}再次编译,我们会发现,程序编译都不能通过,提示返回类型冲突,重写错误。

本文探讨了C++中的重写(Override)与隐藏(Hide)的区别。重写仅发生在多态环境中,涉及基类的virtual函数。而隐藏则指派生类的同名函数屏蔽了基类函数。当派生类的同名函数与基类virtual函数参数列表相同但返回类型不同时,会导致编译错误,因为编译器视为方法重写错误。
最低0.47元/天 解锁文章
1268

被折叠的 条评论
为什么被折叠?



