引用的本質和C 類封裝的原理

2021-09-25 10:52:24 字數 1404 閱讀 3403

引用的本質和c++類封裝的原理, 談到這個問題就要,首先連線長指標變數;即型如int * const p,他表示的是p的指向不可變,指向的內容可讀可寫;

int a = 10;

int * const p = &a;

*p = 20;

cout << *p << endl;

而如果使用const int *const p這樣指標p就完全變為唯讀的,如;

int a = 10;

const int * const p = &a;

*p = 20;//編譯器報錯;

cout << *p << endl;

這個取位址和取內容全是自己手動操作的, 而引用是什麼做法, 化繁為簡, 將去位址和取內容自動化, 封閉起來看不到;

指標必須初始化的原因是,他的內部被const修飾,所以指標初始化不能賦值;

如;

int a = 10;

int & re = a; //等價於 int * const p = &a;即自動取位址, 編譯器做的;不過這個p是內藏的,在彙編**下能看到;相當於對使用者封裝;

re = 20;//等價 *p = 20;即他自動取內容運算;

所以他本質就是常指標, 封裝了指標操作, 內部依然是指標, 只不過使用者看不到, 以為就是變數別名;

下面要講的封裝的本質就和類的長指標有巨大關係;

我們先看乙個列子;

class test

int & geta(void)//get a data;

private:

int a;//only one member data;

};int main(int argc, char ** ar**)

編譯器會將它翻譯成大致下面這樣;

struct test

;void test_initialization(test * const mythis, int a)

int & test_geta(test * const mythis)

int main(int argc, char ** ar**)

這裡你可以看到, 在通過變數名呼叫函式是通過編譯器販子將物件(即c語言中的結構體變數)的位址自動以長引用的方式傳遞的, 這裡你大致可以感覺到類封裝的本質就是在將結構體穿個馬甲, 通過橋梁常指標將其連線起來, 也知道,為什麼類中函式不占用大小,只有成員變數有大小;

類封裝將引用中內涵指標變數釋放出來給使用者, 即是this指標, 這裡你也知道了傳來的this指標為什只能在成員函式後面加const修飾, 傳來的this指標加const修飾不能返回成員變數的引用, 因為修飾後相當於const int * cosnt p, 變成唯讀變數, 

C 引用的本質

引用的意義 1 引用作為其他變數的別名而存在,因此在一些場合可以代替指標 2 引用相對於指標來說具有更好的可讀性和實用性 引用的本質 1 單獨定義普通引用時 必須初始化,說明很像乙個常量 includeusing namespace std 1 第一點 單獨定義普通引用時 必須初始化,說明很像乙個常...

C 引用的本質分析

事物的難度遠遠低於對事物的恐懼!下邊來看看乙個老生常談的交換函式 include using namespace std 引用方式 void swap1 int a,int b 注意 函式引數中的引用不需要初始化 指標方式 void swap2 int a,int b int main int ar...

C 中引用的本質

引用的本質 結論一 當常引用指向了不同型別的資料時,會產生臨時變數,即引用指向的並不是初始化時的那個變數 int age 10 const double rage age age 30 cout age is age endl cout rage is rage endl 相等於int age 10...