(1)重载必须发生在一个类中
(2)重写必须发生在父类和子类之间,相同的函数原型
(3)重写有两种,加virtual->多态,不加->重定义
一个程序说明
#include "iostream"
using namespace std;
class Parent
{
public:
//这三个函数关系是:重载
virtual void func(){
cout<<"func()"<<endl;
}
virtual void func(int i){
cout<<"func()"<<i<<endl;
}
virtual void func(int i,int j){
cout<<"func()"<<i<<j<<endl;
}
private:
};
class Child:public Parent{
public:
//这三个函数关系是:重载
virtual void func(int i,int j){
cout<<"func()"<<i<<j<<endl;
}//这个函数和Parent的virtual void func(int i,int j)是重写关系,且用virtual修饰,可产生多态
virtual void func(int i,int j,int k){
cout<<"func()"<<i<<j<<k<<endl;
}
};
void main(){
Child c1;
c1.func();
system("pause");
}
c1继承了父类的函数,然而执行c1.func()会报错:
error C2661: “Child::func”: 没有重载函数接受 0 个参数
原因:子类无法重载父类函数,父类同名函数将被覆盖。
解决方法:加域作用符(c1.Parent::func())