在C++中我们引入了函数的重载和重写,但是好多时候我们往往会将这两个概念搞混。
今天就来讲讲这两个概念的区别。
函数重载
在同一个作用域中,名字相同,但是参数列表不同的函数称为重载函数。
【注意】:这里的参数列表不同,是指的参数的类型,个数不同。
我们不能通过函数的返回类型来判断它们是不是重载函数。
下面我们来看一个函数重载的例子:
int func(int a, int b)
{
int c = a + b;
return c;
}
float func(float a, float b)
{
float c = a + b;
return c;
}
上面的两个例子就是函数重载,它们的参数列表的数据类型不一样。
函数重写
函数重写主要用于不同的作用域之间(基类和派生类之间)。
函数重写的要是:函数的原型相同,参数列表,名字,返回类型都相同,但是函数体里的具体操作可以不同。
函数的重写主要用来体现C++的一大特性——多态。所以基类的函数必须有virtual关键字修饰,而且不能用static关键字修饰。
下面来看一下函数重写的例子:
Class A
{
public:
virtual void print()
{
cout << m_a << endl;
}
private:
int m_a;
};
Class B : public A
{
public:
virtual void print()
{
cout << m_b << endl;
}
private:
int m_b;
};
在类B中,将print()函数重写了,它和基类中的print()函数的原型必须一样!
总结一下:
函数重载的作用域必须相同,参数列表必须不同
函数重写的作用域是不同的,函数原型必须相同。