1.什么是重载呢?
重载:同一个作用域,相同函数名,参数列表不同,与返回值是否相同没有关系,重载又称静态多态
重载的作用:减轻程序员对函数名的记忆负担,可让所有功能相同的函数使用同一个名字。
参数列表不同可表现在:
(1)参数个数方面
例如:int Add(int i,int j);
int Add(int i,int j,int k);
(2)参数类型方面
例如:int Add(int left,int right);
char Add(char left,char right);
(3)参数的次序方面(是<参数类型>的次序,比如是一个int和一个char,这样互换顺序可以重载,不能是两个int交换次序)
例如:int Add(int left,char right);
int Add(char right,int left);
//参数类型方面
运行环境:vs2013,win10
#include<stdlib.h>
#include<iostream>
using namespace std;
int Add(int left, int right)
{
return left + right;
}
float Add(float left, float right)
{
return left + right;
}
int main()
{
cout << Add(1, 2) << endl;
cout << Add(1.1f, 2.2f) << endl;
system("pause");
return 0;
}
//参数个数方面
#include<stdlib.h>
#include<iostream>
using namespace std;
int Add(int i, int j)
{
return i + j;
}
int Add(int i, int j, int k)
{
return i + j + k;
}
int main()
{
cout << Add(1, 2) << endl;
cout << Add(1, 2, 3) << endl;
system("pause");
return 0;
}
运行结果:
//参数次序方面
#include<stdlib.h>
#include<iostream>
using namespace std;
int Add(int left, char right)
{
return left + right;
}
int Add(char right, int left)
{
return right + left;
}
int main()
{
cout << Add(1, '2') << endl;
cout << Add('1',3) << endl;
system("pause");
return 0;
}
运行结果:
2、什么是隐藏呢?
隐藏:又叫同名隐藏,在继承体系中,基类和派生类有相同的名字的成员,如果使用派生类对象调用和基类中同名的成员,会先调用派生类自己中的此成员,会把基类中的此成员隐藏。
相同名字的成员:
可以是同名的成员变量或者同名的成员函数,和此变量或此函数的类型无关
例如:
1.在基类中某变量是int型,在派生类中此变量是char型,这样也会发生同名隐藏
2.在基类中某函数是int型,在派生类中此函数是char型,这样也会发同名隐藏
如何解决同名隐藏问题?
1.若想访问基类中的成员或函数,加上<<类作用域限定符>>就好
2.那就是不要定义相同名字的成员或函数。
3、什么是重写呢?
重写:在继承体系中,如果基类中有虚函数,在派生类中也有同名的虚函数,并且基类和派生类中同名的虚函数原型相同。
原型相同表现在:
1.返回值相同;
2.函数名形同;
3.参数相同
注:协变和析构函数也可以构成重写
协变:基类返回基类的指针或引用,派生类返回派生类的指针或引用,不满足:函数返回值
析构函数:不满足函数名