函数重载
什么是函数重载:
同一作用域,函数同名不同参(个数、类型、顺序),C++支持函数重载,C不支持函数重载。C++如何做到重载的:
原理:
C++代码在编译时会根据参数列表对函数进行重命名。
例如:
void Swap(int a, int b) //会被重命名为_Swap_int_int,
void Swap(float x, float y)//会被重命名为_Swap_float_float。
当发生函数调用时,编译器会根据传入的实参去逐个匹配,以选择对应的函数。重载仅仅是语法层面的,本质上它们还是不同的函数,占用不同的内存,入口地址也不一样。
—————————————–具体例子C和C++的区别—————————————————
- 举例说明:
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。
题目:
希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。
1.C++语言:
C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading),借助重载,一个函数名可以有多种用途。
//交换 int 变量的值
void Swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
//交换 float 变量的值
void Swap(float *a,float *b)
{
float temp=*a;
*a=*b;
*b=temp;
}
//交换 char 变量的值
void Swap(char *a,char *b)
{
char temp=*a;
*a=*b;
*b=temp;
}
//交换 bool 变量的值
void Swap(bool *a,bool *b)
{
char temp=*a;
*a=*b;
*b=temp;
}
2.C语言:
程序员需要分别设计出三个不同名的函数,其函数原型可以如下:
void swap1(int*a,int*b);//交换 int 变量的值
void swap2(float*a,float*b);//交换 float 变量的值
void swap3(char*a,char*b);//交换 char 变量的值
void swap4(bool*a,bool*b);//交换 bool 变量的值
方法的重写(覆写,覆盖)
1.定义:
指子类重新定义父类虚函数的方法。在子类中可以根据需要对从基类中继承来的方法进行重写,重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西。
1.)父类与子类之间的多态性,对父类的函数进行重新定义。同方法名和同参数;
2.)子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖原有的方法,若需要父类中原有的方法,使用super关键字;
3.)子类函数的访问修饰符不能小于父类的;(父类为public,则子类不能为protected或者private等,只能是public的)
4.)子类抛出异常小于等于父类方法抛出异常;
5.)重写Override,运行时,方法重写(子类继承父类并重写方法)以及对象造型(父引用子类型对象),父子类的多态性表现,是动态分派,指令invokevirtual,在运行期间根据常量池中的类方法的符号引用解析到实际的类型上;
2.作用:
重写是为了增强类的重用性和复用性,扩展性;重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西