重载&&方法的重写

函数重载

  • 什么是函数重载:
    同一作用域,函数同名不同参(个数、类型、顺序),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.作用:
重写是为了增强类的重用性和复用性,扩展性;重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值