中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

引用拷貝構(gòu)造賦值語(yǔ)句-創(chuàng)新互聯(lián)

1、引用

成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供定陶企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為定陶眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

 C++中有一種新的數(shù)據(jù)類(lèi)型,對(duì)已開(kāi)辟空間在取一個(gè)名字;

引用 拷貝構(gòu)造 賦值語(yǔ)句

 就是別名,不開(kāi)辟新的空間,沒(méi)有空引用

 例:int &b; 錯(cuò)誤,

 交換兩個(gè)數(shù)字用引用實(shí)現(xiàn):

引用 拷貝構(gòu)造 賦值語(yǔ)句

常見(jiàn)的幾種引用形式:

 (1)、對(duì)變量引用:int a = 10;

     int &b = a;

 (2)、對(duì)指針引用:int *p = &a;

     int *&q = p;

 (3)、對(duì)數(shù)組引用:int ar[3] = {1, 2, 3,};

     int (&b)[3] = ar;

此外還有以下類(lèi)型的引用:

 (1)、常引用 const int x = 100;

 int &y = x;       錯(cuò)的,非常量的不能引用常量,只有自己也加上const成為常量才可以引用。

 常量只能常引用;

 (2)、int n = 20;

 const int &m = n;  對(duì)的,常量引用非常量可以,因?yàn)槟憧梢愿淖?,我要求自己不能改變而已?/p>

 變量也可以常引用;

(3)、 const double d = 12.34;

 const int &f = d;   對(duì)的,此時(shí)d和f由于不是同一種數(shù)據(jù)類(lèi)型,所以地址不一樣,此時(shí)f引用的不是真實(shí)的d,而是對(duì)產(chǎn)生的臨時(shí)變量的引用(此時(shí)會(huì)把整數(shù)截取);

 (4)、double d = 12.34;

 int &f = d;  錯(cuò)的,臨時(shí)變量一般都具備常量的性質(zhì),我們往往在類(lèi)型轉(zhuǎn)換時(shí)所產(chǎn)生的中間臨時(shí)變量具備常量的性質(zhì);所以要加const,對(duì)常量的引用,

引用 拷貝構(gòu)造 賦值語(yǔ)句

加上const后,常引用對(duì)常量,因?yàn)橹虚g的臨時(shí)變量都是常量(在類(lèi)型轉(zhuǎn)換時(shí)會(huì)產(chǎn)生中間的臨時(shí)變量);只要類(lèi)型不同,就都會(huì)轉(zhuǎn)換;

引用 拷貝構(gòu)造 賦值語(yǔ)句

2、拷貝構(gòu)造函數(shù)

(1)、對(duì)象初始化對(duì)象,調(diào)用拷貝構(gòu)造函數(shù)。

Test(const Test &t){}

 因?yàn)榭截悩?gòu)造函數(shù)也是構(gòu)造函數(shù),所以和類(lèi)名相同。

 const只是為了保護(hù)t不被更改;

 &必須加上,因?yàn)?Test t(t1);此時(shí)相當(dāng)于t1給t初始化,調(diào)用拷貝構(gòu)造函數(shù),將陷入無(wú)窮的遞歸當(dāng)中,所以要使用引用;

 (2)、拷貝構(gòu)造函數(shù)系統(tǒng)會(huì)有默認(rèn)的,按其成員進(jìn)行拷貝!

 (3)、調(diào)用拷貝構(gòu)造函數(shù)的三種場(chǎng)合:

 a、初始化對(duì)象時(shí),Test t(t1); 和 Test t = t1;

 b、形參實(shí)參傳遞時(shí)

 c、返回值為對(duì)象時(shí),會(huì)創(chuàng)建一個(gè)無(wú)名的臨時(shí)變量,(此時(shí)相當(dāng)于對(duì)象給對(duì)象賦值),返回的是一個(gè)新的匿名對(duì)象;

3、賦值語(yǔ)句

 賦值語(yǔ)句系統(tǒng)也有默認(rèn)的,是各成員之間相互賦值。

void operator=(const Test t);

 賦值語(yǔ)句在對(duì)象賦值時(shí)調(diào)用,可以說(shuō)是對(duì)=的重載;

 此時(shí)const只是為了保護(hù)不被修改,t調(diào)用拷貝構(gòu)造函數(shù)(對(duì)象給對(duì)象初始化賦值),但是為了時(shí)間和空間的效率,此處用引用更好;

void operator=(const Test &t);

此時(shí)不能連等賦值,t = t1 = t2;  這個(gè)的本質(zhì)就是:t.operator=(t1.operator=(t2));

所以的有返回值呀,

Test& operator=(const Test &t){
  if(this != &t){
   data = t.data;
  }
    
  return *this;   
}

因?yàn)椴皇莿?chuàng)建臨時(shí)無(wú)名對(duì)象,所以可以引用返回;臨時(shí)的不行,返回時(shí)空間就已經(jīng)析構(gòu)了。

適用場(chǎng)合:Test t; t = t1 =t2 = t3;(對(duì)象已經(jīng)初始化過(guò)了,此時(shí)就叫做賦值);

4、函數(shù)的優(yōu)化調(diào)用:

#include<iostream>
using namespace std;
class Test{
public:
    Test(int d = 0) : data(d){
        cout<<"Create Test Object"<<this<<endl;
    }
    Test(const Test &t){
        cout<<"Copy Create Test Object"<<this<<endl;
        data = t.data;
    }
    Test& operator=(const Test &t){
        cout<<"Assign : "<<this<<endl;
        if(this != &t){
            data = t.data;
        }
        return *this;
    }
    ~Test(){
        cout<<"Free Test Object"<<endl;
    }
public:
    int GetData()const{
        return data;
    }
private:
    int data;
};
Test fun(Test x){
    int value = x.GetData();
    Test tmp(value);   //創(chuàng)建臨時(shí)tmp對(duì)象,調(diào)用構(gòu)造函數(shù)
    return tmp;        //返回值為對(duì)象,調(diào)用拷貝構(gòu)造,借助中間橋梁返回;
}                      //立馬先析構(gòu)tmp和x臨時(shí)對(duì)象,在進(jìn)行賦值語(yǔ)句,最后析構(gòu)其他對(duì)象;  
int main(void){
    Test t1(100);     //創(chuàng)建對(duì)象t1,調(diào)用構(gòu)造函數(shù)
    Test t2;          //創(chuàng)建對(duì)象t2,調(diào)用構(gòu)造函數(shù)
    t2 = fun(t1);     //形參,實(shí)參傳遞,調(diào)用拷貝構(gòu)造
    return 0;
}

引用 拷貝構(gòu)造 賦值語(yǔ)句

優(yōu)化以上的代碼,使節(jié)省空間和時(shí)間:

Test fun(Test &x){
    int value = x.GetData();
    return Test(value);  //創(chuàng)建臨時(shí)無(wú)名對(duì)象,編譯器直接認(rèn)為:直接就是這個(gè)t2對(duì)象
}

int main(void){
    Test t1(100);      //創(chuàng)建對(duì)象t1
    Test t2 = fun(t1); //不用再調(diào)用賦值語(yǔ)句;

    return 0;
}

引用 拷貝構(gòu)造 賦值語(yǔ)句

效率最低-->代碼的優(yōu)化。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前標(biāo)題:引用拷貝構(gòu)造賦值語(yǔ)句-創(chuàng)新互聯(lián)
文章源于:http://m.rwnh.cn/article28/ccgojp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站制作、App設(shè)計(jì)用戶體驗(yàn)、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
南昌县| 阿坝县| 温宿县| 东兰县| 封开县| 会昌县| 南投市| 江油市| 通海县| 司法| 桃园市| 永定县| 河南省| 蕲春县| 沅陵县| 锡林浩特市| 永济市| 宁陕县| 桐梓县| 东乌珠穆沁旗| 七台河市| 万盛区| 内丘县| 荆州市| 彰化县| 丹东市| 浑源县| 双鸭山市| 广州市| 东乡县| 新乡县| 溧水县| 东丽区| 灌云县| 祁门县| 鄱阳县| 延长县| 共和县| 渭南市| 广灵县| 沭阳县|