" 重载 " 英文名称 Overloading , 特指 " 函数重载 " ;
" 重载 " 是在 同一个类中 对 函数 或 操作符 进行多次定义 ;
这些 函数或操作符 在 参数类型 或 数量上 有所不同 ; 也就是 参数列表 不同 ;
返回值 并不作为 函数重载 的 判定标准 ;
特别注意 :
重载的意义 : 提高了 代码的 灵活性 和 复用性 ;
下面同一个类中的 3 个函数就是 函数的重载 :
void fun(int a);
void fun(int a, int b);
void fun(double d);
上述 3 个函数的 参数列表 中 , 参数的 个数 和 类型 各不相同 , 这是 函数重载 ;
下面的 2 个函数 , 参数列表 和 函数名相同 , 返回值不同 , 不是函数重载 ;
void fun(int a);
int fun(int a);
函数重载可参考 :
博客 ;
" 重写 " 英文名称 " Overriding " ;
" 重写 " 是 子类 中定义 与父类中 具有相同名称 和 参数列表 的 虚函数 ;
" 重写 " 特征 :
当 子类 对 父类 的函数 实现了 " 重写 " 后 , 在程序运行时 , 根据对象的 实际类型 来调用对应的函数 ;
" 重写 " 使得 子类可以按照自己的需求实现父类的虚函数 , 从而改变继承的行为 ;
重写的意义 : 增强了代码的 扩展性和灵活性 ;
函数重写 , 参考 【C++】多态 ① ( 类型兼容性原则与函数重写 | “ 多态 “ 引入 | 函数重写 ) 博客 ;
重写 代码示例 :
class Parent
{
public:
virtual void func() {
cout << "父类函数" << endl;
}
};
class Child : public Parent
{
public:
virtual void func() {
cout << "子类函数" << endl;
}
};
如果 子类 重写 父类 的函数 , 分两种情况 :
子类 中 重定义 父类的函数 , 会导致 父类 的 同名函数被覆盖 , 如果想要调用父类的函数 , 需要使用 父类类名::被重定义的函数()
方式调用 ;
重定义 代码示例 :
class Parent
{
public:
void func() {
cout << "父类函数" << endl;
}
};
class Child : public Parent
{
public:
void func() {
cout << "子类函数" << endl;
}
};