C++函数重载(overload)

C++函数重载(overload),第1张

函数重载:函数名相同,函数的参数个数,函数的参数类型,函数的参数顺序形成的这些函数,那么说这些函数构成 函数重载

判断是否构成函数重载 规则:

1. 函数名相同 --- 前提条件

2. 函数的参数类型不同 || 参数个数不同 || 参数类型的顺序不同,三选一即可,均可构成重载

3. 函数的返回值不是做为函数重载判断的依据

演示代码:

#include 


using namespace std;
/*
函数重载:函数名相同,函数的参数个数,函数的参数类型,函数的参数顺序形成的这些函数,那么说这些函数构成 函数重载
 判断是否构成函数重载 规则:
     1. 函数名相同 --- 前提条件
     2. 函数的参数类型不同 || 参数个数不同 || 参数类型的顺序不同,三选一即可,均可构成重载
     3. 函数的返回值不是做为函数重载判断的依据
*/
void func()
{
    cout << void func()<

C++是怎样来支持函数重载呢。而C语言不支持,原因在于C和c++,他们之间对源程序编译技术不一样,C++编译器编译源文件时通过底层倾轧(name mangling)技术,v--void       ---int       c -- char

底层倾轧(name mangling) ---- 将原有函数名 + 参数类型 ----> 在底层时,形成一个新的函数名,从底层,各个函数名还是不一样的。

比如:

void print(int data) ---> void print_i(int data)

void print(int data,int data2) ---> void print_ii(int data,int data2)

void print(char data) ---- void print_c(char data)

以上三个函数通过函数重载,实现了静态联编,从而让函数体现出了多种形态---也被称之为静态多态

---因为它的实现发生在程序编译期


默认参数和函数重载同时共存,他们在一起时,会出现一种现象:函数调用时的模糊性

//函数的参数个数不同实现默认参数与函数重载一起
QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)
QPushButton(const QString &text, QWidget *parent = nullptr)
QPushButton(QWidget *parent = nullptr)

1.使用函数重载实现初始化数组的函数,这个函数可以初始化int,double,char

函数名:init_array

#include 


using namespace std;
/*
1 使用函数重载实现初始化数组的函数,这个函数可以初始化int,double,char
函数名:init_array


要点:理解数组做为形参时变化,能力强的同学可以考虑使用数组指针引用
*/


void init_array(int* p,int len)
{
   // cout << "void init_array(int* p,int len)"<

2 编写函数,计算一个圆锥体(cone)的体积(volume),并且在不指定高度时,默认高度按照1计算,底部半径没有默认值。

圆锥体积公式:V=1/3sh

s:底部圆面积

h:圆锥体高

利用函数重载设计两个计算圆锥体积函数

#include 


using namespace std;
/*
2 编写函数,计算一个圆锥体(cone)的体积(volume),并且在不指定高度时,默认高度按照1计算,底部半径没有默认值。
圆锥体积公式:V=1/3sh
s:底部圆面积
h:圆锥体高
利用函数重载设计两个计算圆锥体积函数
*/
/**
 * @brief calc_volume
 * @param dir   --- 底部圆的半径
 * @param height  --- 圆锥体高
 * @return
 */
double calc_volume(int dir,int height=1)
{
    return 1*1.0/3*dir*dir*3.14*height;
}
/**
 * @brief calc_volume
 * @param area  --- 底部圆的面积
 * @param height --- 圆锥体高
 * @return
 */
double calc_volume(double area,int height=1)
{
    return 1*1.0/3*area*height;
}


void calc_volume( double& volume,double area,int height=1)
{
    volume = 1*1.0/3*area*height;
}
int main()
{
    cout << calc_volume(5)<

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/3002525.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-09-27
下一篇2022-09-27

发表评论

登录后才能评论

评论列表(0条)