C++笔记:函数重载、覆盖、隐藏

来源:互联网 发布:淘宝退货率最低的产品 编辑:程序博客网 时间:2024/06/11 17:53

1.函数重载

(1)定义

When two or more different declarations are specified for a single name in the same scope, that name is said to overloaded. By extension, two declarations in the same scope that declare the same name but with different types are called overloaded declarations. Only function declarations can be overloaded; object and type declarations cannot be overloaded.

函数重载是指在同一作用域内,可以有一组具有相同函数名不同参数列表的函数,这组函数被称为重载函数。

Ps: 函数重载时,返回类型相同与否并无关系;仅仅只有返回类型不相同时,重载并不成立

(2)规则

1.精确匹配:参数匹配而不做转换,或者转换等价参数
如:数组名到指针、函数名到指向函数的指针、T到const T 、T 到 T &
Ps:匹配函数时,const被忽略,仅当T为指针或引用时,const 不能被忽略
2.提升匹配:即整数提升(如bool 到 int、char到int、short 到int),float到double
3.使用标准转换匹配:如int 到double、double到int、double到long double

(3)在类中的函数重载

仅当同一类中,才能进行函数重载,此外,virtual可有可无,对函数重载并无影响

2.函数覆盖

(1)概念
因为函数覆盖这一概念,仅跟类的虚成员函数有关。所以我们需要先明白什么是虚成员函数:简单来说,在C++的类中,被关键字virtual所修饰的成员函数,就是虚函数。

Ps:虚函数中有一种特殊的情况:纯虚函数.
相当于基类只提供接口而不定义具体实现,在函数声明后加=0
如:virtual void function_name() = 0
派生类可以不覆盖基类的虚函数,调用基类的实现,但是必须实现基类的纯虚函数

(2)规则

若基类的成员函数被virtual所修饰,且派生类提供了该函数的新的实现,则在派生类中,基类的该函数被新的实现所覆盖。
若基类中存在虚函数,派生类也覆盖了该虚函数,则指向基类(派生类)的指针(引用)将根据实际所指向对象的类型,决定调用该函数的版本。

3.函数隐藏

(1)如果派生类的函数与基类的函数同名,参数不同,则不论有无virtual关键字,基类的函数将被隐藏(与重载区别)
(2)如果派生类的函数与基类的函数同名,参数相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(与覆盖区别)

资料来源:
http://www.cnblogs.com/renyuan/archive/2013/06/08/3127562.html
http://blog.csdn.net/miao65272156/article/details/25305153

0 0