Cplus2

重载 覆盖 隐藏 (over load , over write, hidden)

This project is maintained by wangfakang

函数的重载,覆盖,隐藏:

重载的概念:

  重载是c++中一个比较重要的概念,他的含义就是指:在一个文件中可以有多个同名的函数,但是他们的参数个数不同或顺序不同 但是不可以只有返回值不同是不可以的.
注意下面这两个是有问题的:

  4 int add(int a, int b)
  5 {
  6     printf("iii\n");
  7     return a + b;
  8 }

  4 int add(int a, float b)
  5 {
  6     printf("fff\n");
  7     return a + b;
  8 }

调用:add(10,12.1);

在进行编译的时候就会报错的,由于类似char short float 等简单类型会引起二义性的.都会隐式的转化为int.
重载是编译时期的多态.

覆盖的概念:

覆盖是c++中多态的另一个表现,所谓的覆盖是指:在子类与父类的函数名相同而且参数个数完全相同, 而且父类函数是一个虚函数,而且父类的函数也要使用virtual进行标记才满足覆盖.
覆盖是运行十七的多态.

隐藏的概念:

  隐藏是指派生类中的函数与父类同名,但是参数个数不同,此时不管有无virtual都是隐藏,最终只会执行子类中的函数.
当参数相同时,函数名相同时,但是父类没有virtual也是会隐藏的.

三个概念之间的区别:

 首先重载的作用范围是相同的,而覆盖或是隐藏的作用范围一个是父类一个是子类.重载不需要virtual进行标记,  但是覆盖需要virtual进行标记.

注意:

函数的重载是c++中才有的,在c语言中函数是不可以进行重载的,如果进行重载编译器会包语法错误[函数同名] 这个也是c++和c语言的进行函数符号化的规则是不一样的.

欢迎一起交流学习

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

Thx

Author