重写必须满足的条件:
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;
}
再次编译,我们会发现,程序编译都不能通过,提示返回类型冲突,重写错误。