1. 函数的重载(overload)
重载:相同作用域下,函数名相同但参数不同(参数个数、参数类型、参数顺序)的函数之间构成函数重载。
重载的特点:
(1)相同的作用范围,一般指同一个类中;
(2)函数名相同
(3)参数不同
(4)与返回值类型无关
(5)与virtual关键字无关
(6)早绑定技术,在编译期间确定调用的函数
class A
{
public:
int func(int a);
void func(int a, int b);
void func(int a, int b, int c);
int func(char* pstr, int a);
virtual double f(double);
int f(double); //声明出错:无法重载仅按返回值类型区分的函数:double f(double);
};
2. 函数的覆盖(override)
覆盖:是指派生类中存在重新定义基类的virtual函数,其函数名、参数列、返回值类型与父类中相应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体不同。
覆盖的特点:
(1)不同的作用范围:分别在派生类和基类中;
(2)函数名、参数类型、返回值都完全一致;
(3)基类中的函数必须有virtual关键字,派生类中不需要一定有virtual关键字;
(4)迟绑定技术,在编译期间不确定具体调用哪一个函数,而是在对象实体化后根据对象的实际类型决定调用哪一个函数
(5)覆盖也叫虚函数重写
#include<iostream>
using namespace std;
class Base
{
public:
virtual void fun(int i)
{