函数重载
- 必须在同一个类中进行
- 子类无法重载父类的函数
- 函数名字相同,参数不同,返回值可以不同
- 重载在编译期间根据参数类型和个数决定函数调用
parent类中func()发生了重载
class Parent
{
public:
Parent()
{
cout<<"Parent01:printf()..do"<<endl;
}
public:
void abc()
{
printf("parent abc");
}
//以下两个函数的关系是重载
virtual void func()
{
cout<<"Parent01:void func()"<<endl;
}
virtual void func(int i)
{
cout<<"Parent:void func(int i)"<<endl;
}
virtual void func(int i, int j)
{
cout<<"Parent:void func(int i, int j)"<<endl;
}
virtual void func(int i, int j,int m,int n)
{
cout<<"Parent:void func(int i, int j,int m,int n)"<<endl;
}
};
函数重写
- 发生在父类和子类之间
- 父类与子类中的函数必须有完全相同的原型,相同的参数,返回值也相同
- 重写函数的访问修饰符可以不同
- 虚函数virtual重写,将发生多态,在运行期间根据具体对象的类型决定函数调用
- 非虚函数重载,将发生重定义
child类中的函数func是对类parent中函数func的重写,类parent是虚函数类型
class Parent
{
public:
Parent()
{
cout<<"Parent01:printf()..do"<<endl;
}
public:
void abc()
{
printf("parent abc");
}
//以下两个函数的关系是重载
virtual void func()
{
cout<<"Parent01:void func()"<<endl;
}
virtual void func(int i, int j)
{
cout<<"Parent:void func(int i, int j)"<<endl;
}
};
class Child : public Parent
{
public:
void abc()
{
printf("child abc");
}
//此处2个参数
void func(int i, int j)
{
cout<<"Child:void func(int i, int j)"<<" "<<i + j<<endl;
}
};
网友评论