c 自定義類的物件做函式引數為什麼一定要用引用傳值

2021-06-25 14:47:34 字數 2360 閱讀 7703

1樓:匿名使用者

函式引數有直接變數(如int、char、double等)型別、指標型別和引用型別。

如果引數是變數,傳遞方式是傳值,就是將實參的值複製(複製,意味著空間消耗和時間消耗)到“棧”空間中。

如果引數是指標,傳遞方式是傳址,需將指標複製(同樣也消耗空間和時間,對於陣列而言,只需儲存陣列首地址)到“棧”空間中。

如果是引用,則既不是傳值,也不是傳址,主調函式和被調函式共享引數的存放地址,與全域性變數共享方式相同。

對於拷貝(複製)建構函式而言,類物件通常需要較多的儲存空間,如果按值傳遞,必然會較大消耗“棧”空間,也需要較多的時間實施複製過程。因為複製建構函式不會修改引數的內容,也不會修改引數的屬性,所以建構函式的引數應該是常量引用傳遞,如

2樓:篤俠

不是一定要用引用。

由於物件一般都含有較多的資料成員,當其作為函式引數傳遞時,傳遞物件值的耗時要比傳遞物件地址耗時多,所以一般採用傳遞地址的方式。

使用指標也能傳遞地址,但c++引入了引用的概念之後,使用引用要比使用指標的可讀性好些。

有時,一些函式(包括拷貝建構函式)引數要求用(不是必須用)常引用,目的是為了避免函式體中無意地修改指標所指物件的值。

3樓:匿名使用者

如果引數是類物件,就是值傳遞,就要複製,複製就要調拷貝建構函式。這就形成了拷貝建構函式再調拷貝建構函式,無限遞迴下去。因此只能用引用的方法

4樓:匿名使用者

如果用傳值的方式的話會帶來拷貝的開銷

c++為什麼一定要定義無參建構函式?是用來做什麼的?

5樓:育知同創教育

c++中無參構造來函式的作用:

該類物件源被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式->由建構函式完成成員的初始化工作。

故:建構函式的作用:初始化物件的資料成員。

舉例:class counter

private:

// 資料成員

int m_value;

}counter()是一個無參建構函式,就是為了初始化m_value的。

6樓:匿名使用者

可以不用定義啊。

只要有一個構

造函式就可以,甚至建構函式都可以是私回

有的。類定義必答須要提供建構函式,作用是對類初始化,這個是建構函式的作用,建議好好理解一下。

單例模式中,建構函式是私有的,**如下:

class csingleton

static csingleton *m_pinstance;

public:

static csingleton * getinstance()};

7樓:阡陌她人只為你

並不是一定要定義,主要防止你重新定義了有參建構函式,定義了物件卻沒有初始化。。。

8樓:匿名使用者

沒有這個要求,可以不定義的

c++ 關於自定義函式裡的形參加&問題

9樓:匿名使用者

不知道你學沒學指標?應該還沒吧,指標就是變數在記憶體中的地址,&是取地址符號,因為函式調回用答是單向的值傳遞,所以如果單存的把變數值傳給形參,那麼值傳不會主函式,就不能實現換位,這是要將變數的地址傳過去(即&a),直接對變數操作才可以實現。而比較大小時利用了return語句將值傳回就可以了。

要是還不明白,就看看指標的相關知識就明白了!

10樓:匿名使用者

&用在形參變數前,表示它被用作引用型別,引用型別的形參在函式被呼叫時,不會產生臨時副本,而是直接代替實參。因此,在函式內部的任何操作都在函式返回後對實參產生影響。

11樓:匿名使用者

我告訴你bai,形參和實參(形參就是du被呼叫函式頭定zhi義的引數,實參就dao是呼叫者傳遞過來的專引數)是兩個屬不同的變數。

如果你要更改形參的值並對實參的值也進行修改(比如交換),那麼建議加上&(引用)。當然也可以用指標。

如果你只是想修改形參(或者乾脆兩個都不修改),那麼建議不要加上&。(比如比較大小。)

就像小小好寶貝說的,這個玩意很基礎的。。

12樓:小小好寶貝

&,就是別名,反正bai

函式du,比如說:你叫小明,又叫明明

zhi,兩個是一樣dao的。沒有區別。明明回幹壞事答就是你幹壞事,所以函式內部改變,也即明明做的事情。

外部也會改變,小明也得承認。至於在這裡就不好多作解釋,可以看下c++的書。這個很基礎的,最好自己看下書,屬於語法範圍。

c語言中自定義函式與系統函式的區別

系統函式是包含在系統標頭檔案中的函式,它作為一個外部函式可以被所以包含它標頭檔案的檔案中使用。static除外 庫檔案中的函式多數是與系統無關的,可移植的。自定義函式 包含在自己建立的檔案中,在使用時包含該檔案。1 位置上 系統在系統預設的位置,自定義在本工程的資料夾下 比如 include inc...

js的函式為什麼也是物件,函式怎麼自定義方法和屬性?js權威指南中說物件的方法通常是繼承的屬性

function aa 這樣的合適建立函式 js中函式的內部方法和屬性指的什麼?call 方法是誰的?每個物件都有這個方法嗎?首先js中函式是個特殊的物件,它也有方法和屬性。簡單點的來個例子function abc 這個例子裡邊,aaa就是函式abc的屬性,而say就是方法。call是window物...

在c語言中自定義函式的寫法是怎樣的

看你的函式功能是幹什麼,函式開頭用不用int看的是你函式最後要返回什麼值,返回的型別是什麼就用什麼,格式如下 函式返回型別 沒有返回就void,返回整型就int,字元就char等等 函式名 函式引數。例如定義一個加法函式,最後返回整型就 int addfunction int a,int b 自定義...