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

時間 2021-06-25 14:48:03

1樓:匿名使用者

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

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

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

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

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

classname(const classname &obj)

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語言中自定義函式的寫法是怎樣的

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

C 中對自定義函式的宣告,放main內還是外,在含類的程式中,貌似只能在main內嗎

爬爬 放在類中宣告的函式也叫做成員函式,具體又可區分為靜態成員函式與非靜態成員函式 區別為作用域的不同 作為類的方法 放在主函式中宣告的函式強調的是函式的功能與過程,突出的是過程控制。具體的函式宣告位置是沒有限制的,宣告的位置不同代表了不同的軟體設計思想,前者以類的實現為核心,後者以過程呼叫為核心,...

c 為什麼需要把重新定義的函式定義為虛擬函式

聚發稿網 1不是不能定義,是定義了沒意義。因為建構函式不被繼承,而虛擬函式是要在派生類中重定義的2定義虛解構函式後,由於多型,當使用基類指標指向派生類物件時,會呼叫派生類的虛構函式,然後派生類的解構函式自動呼叫基本解構函式。不是虛的話,直接呼叫基類的解構函式了。如果派生類中有用new分配的記憶體,就...