在說明問題之前,先回顧在c語言中,乙個物件怎麼呼叫物件本身裡的成員。又回顧到了以前tom請lucy吃飯的問題:
一 .this 指標
1 #include23struct
person 4
; 1011
void hello(struct person*t); 12
13int
main() 14
272829
3031
void hello(struct person*t) 32
35
為了方便地請吃飯,我們引用了乙個函式指標來指向hello,在c++中,類似於hello的操作叫做方法;
而結構體struct person叫做類;
在21行 struct person tom這句叫做例項化乙個物件,tom就叫做物件;
為了方便地呼叫到類自身裡面的引數,我們定義了乙個struct person* t,當呼叫方法時候就可以方便地呼叫本身的引數;
而在c++中,乙個物件的this指標並不是物件本身的一部分,不會影響sizeof(物件)的結果。this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式。也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的,它作為非靜態成員函式的隱含形參,對各成員的訪問均通過this進行
1 #include 23using
namespace
std; 4
5struct
person 6
; 1112
intmain() 13
192021
void
person::hello() 22
2728 ~
二 .引用,引用很像c語言中的指標,但是,c++中的引用和c語言的指標卻有著明顯的區別:
1,引用是為了指向同一塊記憶體,只是名字不同而已;而指標是乙個存放位址的變數;
2,指標可以不初始化,而引用必須要初始化;
。。。。(還有,以後補充)
1 #include 23using
namespace
std; 4
5void hello(int &j); 6
7int
main() 8
171819
void hello(int &j) 20
2425 ~
引用是c++特有的。
C 和C 引用的區別
c 用多了,最近又回到c 程式設計。發現有些致命的區別,如果不注意,很可能導致一些莫名其妙的bug。引用型別就是其中乙個。在c 中,引用跟指標比較接近,除了值型別 int,float,struct等 其它型別都是引用型別。它本身是乙個棧上面的變數,指向堆上面的具體例項,可以隨意更改它指向的例項。而在...
指標的初識和解引用
讓我們來 看一下以下的 int a 10 int b 20 int p a p 10 p b p 200 p a int pp p pp a pp 1000 pp b pp 2000 看到這樣的 是不是一臉的懵逼,現在讓我們來看看他的每一句都是什麼意思。開始之前我們先了解一下指標和解引用。指標 po...
C 中 值引用和物件引用的區別
另外,棧有乙個很重要的特殊性,就是存在棧中的資料可以共享。假設我們同時定義 複製內容到剪貼簿 1 2 inta 3 intb 3 編譯器先處理int a 3 首先它會在棧中建立乙個變數為a的引用,然後查詢有沒有字面值為3的位址,沒找到,就開闢乙個存放3這個字面值的位址,然後將a指向3的位址。接著處理...