欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C++中的引用方法

本文小編為大家詳細(xì)介紹“C++中的引用方法”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C++中的引用方法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),鹽山企業(yè)網(wǎng)站建設(shè),鹽山品牌網(wǎng)站建設(shè),網(wǎng)站定制,鹽山網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,鹽山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

背景

在c/c++中,訪問(wèn)一個(gè)變量只能通過(guò)兩種方式被訪問(wèn),傳遞,或者查詢。這兩種方式是:

1.通過(guò)值訪問(wèn)/傳遞變量

2.通過(guò)地址訪問(wèn)/傳遞變量–這種方法就是指針

除此之外沒(méi)有第三種訪問(wèn)和傳遞變量值的方法。引用變量也就是個(gè)指針變量,它也擁有內(nèi)存空間。最關(guān)鍵的是引用是一種會(huì)被編譯器自動(dòng)解引用的指針。很難相信么?

下面是一段使用引用的簡(jiǎn)單c++代碼

#include <iostream.h>  
int main()  
{  
    int i = 10;   // A simple integer variable  
    int &j = i;   // A Reference to the variable i  
    j++;   // Incrementing j will increment both i and j.  
    // check by printing values of i and j  
    cout<<  i  <<  j  <<endl; // should print 11 11  
    // Now try to print the address of both variables i and j  
    cout<<  &i  <<  &j  <<endl;  
    // surprisingly both print the same address and make us feel that they are  
    // alias to the same memory location.  
    // In example below we will see what is the reality  
    return 0;  
}

引用其實(shí)就是c++中的常量指針。表達(dá)式int &i = j;將會(huì)被編譯器轉(zhuǎn)化成int *const i = &j;而引用之所以要初始化是因?yàn)閏onst類(lèi)型變量必須初始化,這個(gè)指針也必須有所指。下面我們?cè)俅尉劢沟缴厦孢@段代碼,并使用編譯器的那套語(yǔ)法將引用替換掉。

#include <iostream.h>  
int main()  
{  
    int i = 10;            // A simple integer variable  
    int *const j = &i;     // A Reference to the variable i  
    (*j)++;                // Incrementing j. Since reference variables are   
                          // automatically dereferenced by compiler  
    // check by printing values of i and j  
    cout<<  i  <<  *j  <<endl; // should print 11 11  
    // A * is appended before j because it used to be reference variable  
    // and it should get automatically dereferenced.  
    return 0;  
}

讀者一定很奇怪為什么我上面這段代碼會(huì)跳過(guò)打印地址這步。這里需要一些解釋。因?yàn)橐米兞繒r(shí)會(huì)被編譯器自動(dòng)解引用的,那么一個(gè)諸如cout << &j << endl;的語(yǔ)句,編譯器就會(huì)將其轉(zhuǎn)化成語(yǔ)句cout << &*j << endl;現(xiàn)在&*會(huì)相互抵消,這句話變的毫無(wú)意義,而cout打印的j值就是i的地址,因?yàn)槠涠x語(yǔ)句為int *const j = &i;

所以語(yǔ)句cout << &i << &j << endl;變成了cout << &i << &*j << endl;這兩種情況都是打印輸出i的地址。這就是當(dāng)我們打印普通變量和引用變量的時(shí)候會(huì)輸出相同地址的原因。

下面給出一段復(fù)雜一些的代碼,來(lái)看看引用在級(jí)聯(lián)(cascading)中是如何運(yùn)作的。

#include <iostream.h>  
int main()  
{  
    int i = 10; // A Simple Integer variable  
    int &j = i; // A Reference to the variable  
    // Now we can also create a reference to reference variable.   
    int &k = j; // A reference to a reference variable  
    // Similarly we can also create another reference to the reference variable k  
    int &l = k; // A reference to a reference to a reference variable.  
    // Now if we increment any one of them the effect will be visible on all the  
    // variables.  
    // First print original values  
    // The print should be 10,10,10,10  
    cout<<  i  <<  ","  <<  j  <<  ","  <<  k  <<  ","  <<  l  <<endl;  
    // increment variable j  
    j++;   
    // The print should be 11,11,11,11  
    cout<<  i  <<  ","  <<  j  <<  ","  <<  k  <<  ","  <<  l  <<endl;  
    // increment variable k  
    k++;  
    // The print should be 12,12,12,12  
    cout<<  i  <<  ","  <<  j  <<  ","  <<  k  <<  ","  <<  l  <<endl;  
    // increment variable l  
    l++;  
    // The print should be 13,13,13,13  
    cout<<  i  <<  ","  <<  j  <<  ","  <<  k  <<  ","  <<  l  <<endl;  
    return 0;  
}

下面這段代碼是將上面代碼中的引用替換之后代碼,也就是說(shuō)明我們不依賴編譯器的自動(dòng)替換功能,手動(dòng)進(jìn)行替換也能達(dá)到相同的目標(biāo)。

#include <iostream.h>  
int main()  
{  
    int i = 10;         // A Simple Integer variable  
    int *const j = &i;     // A Reference to the variable  
    // The variable j will hold the address of i  
    // Now we can also create a reference to reference variable.   
    int *const k = &*j;     // A reference to a reference variable  
    // The variable k will also hold the address of i because j   
    // is a reference variable and   
    // it gets auto dereferenced. After & and * cancels each other   
    // k will hold the value of  
    // j which it nothing but address of i  
    // Similarly we can also create another reference to the reference variable k  
    int *const l = &*k;     // A reference to a reference to a reference variable.  
    // The variable l will also hold address of i because k holds address of i after  
    // & and * cancels each other.  
    // so we have seen that all the reference variable will actually holds the same  
    // variable address.  
    // Now if we increment any one of them the effect will be visible on all the  
    // variables.  
    // First print original values. The reference variables will have * prefixed because   
    // these variables gets automatically dereferenced.  
    // The print should be 10,10,10,10  
    cout<<  i  <<  ","  <<  *j  <<  ","  <<  *k  <<  ","  <<  *l  <<endl;  
    // increment variable j  
    (*j)++;   
    // The print should be 11,11,11,11  
    cout<<  i  <<  ","  <<  *j  <<  ","  <<  *k  <<  ","  <<  *l  <<endl;  
    // increment variable k  
    (*k)++;  
    // The print should be 12,12,12,12  
    cout<<  i  <<  ","  <<  *j  <<  ","  <<  *k  <<  ","  <<  *l  <<endl;  
    // increment variable l  
    (*l)++;  
    // The print should be 13,13,13,13  
    cout  <<  i  <<  ","  <<  *j  <<  ","  <<  *k  <<  ","  <<  *l  <<endl;  
    return 0;  
}

我們通過(guò)下面代碼可以證明c++的引用不是神馬別名,它也會(huì)占用內(nèi)存空間的。

#include <iostream.h>  
class Test  
{  
    int &i;   // int *const i;  
    int &j;   // int *const j;  
    int &k;   // int *const k;   
};  
int main()  
{      
    // This will print 12 i.e. size of 3 pointers  
    cout<<  "size of class Test = "  <<   sizeof(class Test)  <<endl;  
    return 0;  
}

結(jié)論

我希望這篇文章能把c++引用的所有東東都解釋清楚,然而我要指出的是c++標(biāo)準(zhǔn)并沒(méi)有解釋編譯器如何實(shí)現(xiàn)引用的行為。所以實(shí)現(xiàn)取決于編譯器,而大多數(shù)情況下就是將引用實(shí)現(xiàn)為一個(gè)const指針。

引用支持c++虛函數(shù)機(jī)制的代碼

#include <iostream.h>  
class A  
{  
public:  
         virtual void print() { cout<<"A.."<<endl; }  
};  
class B : public A  
{  
public:  
         virtual void print() { cout<<"B.."<<endl; }  
};  
   
class C : public B  
{  
public:  
         virtual void print() { cout<<"C.."<<endl; }  
};  
int main()  
{  
         C c1;  
         A &a1 = c1;  
         a1.print(); // prints C  
         A a2 = c1;  
         a2.print(); // prints A  
         return 0;  
}

讀到這里,這篇“C++中的引用方法”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標(biāo)題:C++中的引用方法
標(biāo)題路徑:http://aaarwkj.com/article12/igiigc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司面包屑導(dǎo)航、用戶體驗(yàn)、網(wǎng)站收錄、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(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)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
久久亚洲精品综合一区| 亚洲男人天堂在线观看| 中文欧美一区二区精品| 日本一区二区三区免费黄视频| 日韩无码一区二区视频| 91综合午夜精品福利| 午夜性生活免费在线观看| 欧美成人精品在线观看| 日本国产美女精品一区二区 | 一区二区三区高清av在线| 日本一区二区在线观看视频| 小黄片免费在线播放观看| 国产区精品福利在线熟女| 国产老太婆精品久久久久| 日韩成人精品一区欧美成人| 欧美日韩精品免费在线观看| 亚洲欧美精品成人一区| 色哟哟免费在线观看视频| 国产国产精品人在线观看| 欧美性极品少妇精品网站| 在线一区二区三区高清视频 | 国产亚洲精品视频中文字幕| 久久亚洲一本综合久久| 超碰欧美黄色免费在线| 久久96国产精品久久久| 尤物视频网站在线观看| 日韩三级av在线免费观看| 极品大胸美女被啪啪的高潮| 国产九色av在线一区尤物| 日日干天天日夜夜操| 亚洲国产不卡一区二区三区| 精品国产欧美亚洲91| 国产中文字幕精品在线| 精品国产综合一区二区三区| 国产成人免费公开视频| 亚洲视频一区二区精品| 丝袜在线美腿视频网站| 亚洲午夜一区二区不卡| 蜜桃久久国产精品一区二区| 国产精品一级片免费看| 亚洲精品日韩国产av|