C++复习之路十四——函数重载和重写

在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()函数的原型必须一样!

总结一下:

函数重载的作用域必须相同,参数列表必须不同

函数重写的作用域是不同的,函数原型必须相同。

猜你喜欢

转载自blog.csdn.net/y____xiang/article/details/80140292