第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

C語言到C++(4) - 重載

標(biāo)簽:
C++

webp

C++中新增了重载功能,重载分为两部分,函数重载和运算符重载。

1. 函数重载

在C语言编程中,我们经常遇到一组函数完成同一类功能的情况。比如:

int MaxInt(int a, int b);long MaxLong(long a, long b);float MaxFloat(float a, float b);

这三个函数的功能都是从a和b中找出大的那个输出。每次遇到这种问题,最麻烦的就是要想三个不同的函数名去命名。如今,在C++中,我们可以让它们共用同一个函数名。

int Max(int a, int b);long Max(long a, long b);float Max(float a, float b);

我们来看看它们是如何工作的:

#include <iostream>using namespace std;int Max(int a, int b){    cout << "-> Call Max Int" << endl;    return a > b ? a : b;
}long Max(long a, long b){    cout << "-> Call Max Long" << endl;    return a > b ? a : b;
}float Max(float a, float b){    cout << "-> Call Max Float" << endl;    return a > b ? a : b;
}int main(){    int nA = 1;    int nB = 2;    float fA = 3.0f;    float fB = 4.0f;    long lA = 10;    long lB = 11;    cout << "Max(nA, nB) : " << Max(nA, nB) << endl;    cout << "Max(fA, fB) : " << Max(fA, fB) << endl;    cout << "Max(lA, lB) : " << Max(lA, lB) << endl;    return 0;
}

执行结果:


在C++中,允许在同一个作用域中使用同一个函数名定义多个函数,只要这些函数的参数个数或参数类型不同即可。

函数重载注意

  • 可以利用参数个数区分

  • 可以利用参数类型区分

  • 不能利用返回值区分

在C++内部,有种能够唯一标识函数的东西叫做函数签名。函数签名与函数名、参数个数和参数类型有着紧密的关系,唯独与返回值无关。道理其实很简单,在调用函数时,如果不接收返回值,比如:

   int Fun()
   {       return 0;
   }   long Fun()
   {       return 1;
   }   void main()
   {
       Fun();
   }

main函数中,我们如何通过返回值判断它调用的是哪个函数呢?如果我们都判断不出,那么计算机如何能够判断的出呢。

2. 运算符重载

C语言到C++(1) - 基本变化中,我们介绍了cincout的使用,其中会用到<<>>。在C语言中,这两个是位运算符,而到了C++中,它们又增加了表示stream的功能,这就是运算符重载。

我们举一个常用的例子,在C语言中,比较运算符只能比较基本数据类型,如:

int a = 0;int b = 1;if(a < b)
{    // Do something}

但如果我们需要比较两个结构体的大小呢?看看这段代码:

#include <iostream>using namespace std;typedef struct _tagNode{
    int m_x;    int m_y;
}Node;bool operator < (const Node& node1, const Node& node2)
{    if ((node1.m_x + node1.m_y) < (node2.m_x + node2.m_y))
    {        return true;
    }    else
    {        return false;
    }
}int main(){

    Node n1 = { 1, 2 };
    Node n2 = { 3, 4 };    if (n1 < n2)
    {        cout << "n1 is min" << endl;
    }    else
    {        cout << "n2 is min" << endl;
    }    return 0;
}

n1和n2是两个Node类型的结构体,我们想要用“<”比较它们,就需要通过运算符重载的方式定义一个“<”的新功能。

bool operator < (const Node& node1, const Node& node2)

在这个函数的定义中,制定了一个比较两个Node数据类型的规则,就是比较它们两个成员变量之和。程序的执行结果如下:




作者:天花板
链接:https://www.jianshu.com/p/45752a292c2b


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消