4 1c 學習記錄之傳遞物件

2021-10-06 02:46:47 字數 1945 閱讀 3027

###傳遞物件

**按值來傳遞物件:**預設呼叫複製建構函式

class a

a func(a one);

int main()

a func(a one)

int main()   

a * func(a *one)

假如我們將函式宣告為a func(a *one),那麼由於它返回的是物件而不是該物件的記憶體位址,因此在返回該物件時仍然需要呼叫複製建構函式來複製物件.

返回型別和返回值

a *func(a *one)//返回型別是指標位址,若沒加*,則會報錯,因為沒有星號返回型別是物件,與返回值為位址不匹配

>

consnst指標傳遞物件

採用指標來傳遞物件,雖然可以避免呼叫複製建構函式和析構函式,但是由於它得到了該物件的記憶體位址,可以隨時修改物件的資料,因此它實際上是破壞了按值傳遞的保護機制。const指標來傳遞物件,這樣可以防止任何試圖對該物件所進行的操作行為,並且保證返回乙個不被修改的物件。

# const a * const func(const a *const one)// 保證傳遞來的資料和返回的資料都不會被修改
使用引用傳遞物件

引用始終是個常量

a& func(a &one)

//int main()

const  a& func( const a &one) //括號外的const決定了返回型別是常量,因此呼叫該函式時 `a const  &b=func(a);`zu

int main()

到底使用指標還是應用呢

指標可以為空

int main()

另外例子:

int *p=new int;

if(p!=null)

引用指標一起使用

int *p,ra;
引用容易出現的錯誤[重要]

class a

a(a&a)//不建立會提供預設複製建構函式

int get()

pivate:

int x;

};/*去掉引用運算子輸出23正確。即a func()按值返回物件會自動呼叫預設的複製建構函式建立乙個副本*/

a &func()

int main()

int main()

引用乙個按別名返回的堆中物件

int main()

a &func()

在哪建立在**釋放

int main()

{ a *p=new a(99);

func(*p);

cout<總結:

按值傳遞,在傳遞過程中需要複製物件,因此 會呼叫複製建構函式,該函式的作用就是建立某個臨時副本,只要在棧中建立臨時副本都會自動呼叫複製建構函式.

**按位址傳遞:**沒有呼叫複製建構函式,也就沒有輸出複製建構函式的資訊.

Nachos 4 1學習 C 疑問記錄

我太難 菜了!extern extern表示是外部函式或外部變數,比如 1 extern void add int x,inty 表示該函式主體不在當前模組中,在另乙個模組中 檔案 2 extern int total 表示該變數在另乙個模組總定義過。一般都把一些經常用到的列舉和變數之類的寫在.h標...

4 c 學習記錄之引用及函式傳遞

星期二,08.五月 2018 09 10上午 引用 引用就是別名.int rnum num rnum就是num的別名,對rnum的操作就是對numde 操作引用就是別名常量,別名是外號,屬於誰就是誰的,不可更改 別名的值是資料,資料是可以修改的.引用物件 human mike human rmike...

C 學習筆記之引數傳遞

如果形參具有非引用型別,則複製實參的值 如果形參為引用型別,則它只是實參的別名。1.非引用形參 指標形參 指標形參是指向const型別還是指向非const型別,將影響函式呼叫所使用的實參。1 void use ptr const int p 25 void rest int p 6 可以使用int ...