重载
1、只能出现在同一个类当中
2、子类无法重载父类函数,父类中同名的函数会被子类中同名的函数覆盖
3、重载是在编译期间根据函数参数和个数决定的
重写
1、必须发生在父类和子类当中
2、子类对象中有和父类中同名的函数
3、使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)
class Parent
{
public:
void GetName()
{
printf("\nParent");
}
virtual void Fun()
{
printf("Parent");
}
virtual void Fun(int i)
{
printf("Parent:i");
}
virtual void Fun(int i,int j)
{
printf("Parent:i j");
}
};
class Child:public Parent
{
public:
void GetName()
{
printf("\nChild");
}
virtual void Fun(int i,int j)
{
printf("Child:i j");
}
virtual void Fun(int i,int j, int l)
{
printf("Child:i j l");
}
};
main
{
Child c;
c.Fun(1,2);//重载、重写
c.GetName();//重定义
//若想调用父类函数
c.Parent::Fun(1);
}