關於C 中類成員函式返回值的疑問

2022-06-21 14:10:13 字數 2989 閱讀 9576

1樓:手機使用者

問題1:返回date臨時物件的時候,會在記憶體中臨時建立一個date物件,這個物件是臨時性的,當所在的語句結束之後就會被收回,就是不能再用了。而返回date類物件的引用的時候,返回的是該物件本身。

比如你的第一個函式,返回的是this物件本身,所以可以對其進行操作,比如可以這樣操作:datea = dateb = datec; //這三個物件都是date型別,=運算子從右邊開始往左運算,首先將datec賦值給dateb,然後返回dateb本身(因為函式返回的是對*this的引用),然後將dateb賦值給datea,返回datea本身。

問題2:在函式結束的時候dt確實是被銷燬了,但是在銷燬之前,會在記憶體中臨時建立一個date物件(建立的型別要看返回型別,這裡返回是的date型別,所以臨時建立的物件也是date型別),然後將dt賦值給該臨時物件,然後dt就會被銷燬了。所以最後傳遞的值是這個臨時物件。

這個臨時物件的壽命也是很短的,所在語句結束之後就不能用了。

2樓:匿名使用者

1 如果你在這次使用之後還要繼續使用這個物件,那麼就返回引用,比如連續輸出<< ,他返回那個輸出流的引用,所以你連續使用時的結果就是在同一個輸出流中輸出東西 cout<<1<<2<<3;

如果你只需要這個值的話,那麼就不用返回引用,普通返回就可以,他返回的是一個複製的物件

2 人家說的是不能返回區域性物件的·引用· ,而不是不能返回區域性物件。

返回區域性物件實際上是複製一個區域性物件,並返回,return dt 就是複製一個dt,並返回這個複製的值

如果函式是這樣 的 date& operator + (int n)const ,這個返回值是個引用

那麼 return dt;就是錯的

3樓:

(1) 返回物件和引用主要的區別在於引用可以再次進行操作修改,而返回的物件則屬於是一個臨時物件,一會就沒了,不能再修改,只能用來給別人進行賦值或者比較

(2) + 這個函式的返回值是一個 date型的,返回的時候相當於是複製了dt然後傳出去的,你可以理解成每個函式的返回值都有一個自己的在外層看來是隻讀的空間.就跟返回int型一樣,是可以的

c++中類成員函式定義的返回值問題,請熟悉的朋友解答。

4樓:

不知這位同學有什麼問題

1. 過載+運算子,由於定義值返回,這樣構建一個臨時物件並返回屬正常操作;

2. 《流操作符過載,未見不合理部分

3. 向量構造,顯然允許按直角座標和極座標,兩種方式構造向量請提供詳細問題

c++中如何將一個類中的成員函式的返回值傳給另一個類之中

5樓:du瓶邪

假設想在類a裡呼叫類b的函式int f(x),兩種辦法:

1、class a::b 也就是說將b定義為a的父類, 這樣你就可以自然的在a裡面用f(x)了

2、class a

int g(x)

也就是說可以在a裡面使用一個b的物件作為成員變數,這樣就可以用他的函式了.

6樓:齋傲雲

b類中的一個成員變數d要用到a類其中一個成員函式c()的返回值a a;

b b;

b.d = a.c(); 這麼寫就可以了!

7樓:心雲細雨

如果返回值是基本資料型別,就跟普通的函式使用方法一樣

如果返回的是一個物件(或者物件的指標),就把這兩個類捆在一個標頭檔案裡,先定義需要呼叫返回值的那個類

8樓:雲海鷹影

你應該是問怎麼在一個類的函式中呼叫另一個類的成員函式吧?

你需要有一個物件,也就是一個例項。類只是一種概念,就比如車,你說在怎麼把寶馬的某個零件安在賓士上?那麼你得先找到一輛寶馬車,才能想辦法下他的零件。

所以如果有現成的物件的話,就直接呼叫其成員函式就是了,沒有的話你要先創造一個那個類的一個物件,然後在呼叫其成員函式。

如果是私有或保護的成員函式,就將想獲取資訊的類申明為該類的友元。

你也可以將那種類的物件當作引數傳遞

比如 class a{}; class b }; //這樣在f中你就可以呼叫a物件的成員函式了

9樓:匿名使用者

提問具體點,看不懂什麼意思

直接使用不就完了

b.a = a.doit();

c++類中函式成員函式返回值型別 怎麼理解 都是浮雲啊。

10樓:翔子菊子

第一個問題的答覆:t是使用者自定義的型別,因為是直接返回的值,而不是引用,所以編譯器需要複製一份給呼叫的地方使用,因此就需要呼叫t的拷貝建構函式,就是你說的複製建構函式。如果類中沒有顯示定義,那麼編譯器會使用其預設生產的拷貝建構函式,這個時候可能存在未定義行為,主要視t的內部成員來定,如果有其他自定義型別,很可能預設的拷貝構造是不完整的。

第二個問題的答覆:a=b,a就是左值,b就是右值。1=100,1是一個具體的數字,不能作為左值。

同樣t是一個具體的變數,因此不能作為左值。而t的引用,即t&,可以更改其引用的物件,比如可以代表a,同樣可以代表b,因此是可以作為左值的。

其實一個是返回值,一個是返回引用。和函式的傳遞值和傳遞引用的概念是一樣的。

不知道是否說清楚了,希望對你有幫助

c++ ~~類中成員函式返回一個類的物件

11樓:匿名使用者

這樣寫是可以的,return t;就會把呼叫mystring的拷貝建構函式,把t的值傳給你外面用於接受的物件。

12樓:物理公司的

#include

using namespace std;

class a

a a(int c)

~a()

void out(){

cout<

13樓:

先理解一下拷貝建構函式吧

C 中以類名為返回值型別的函式的返回值要怎麼寫?就是最後的return

class a a fun 這是引用返回,不進行值拷貝 a fun 這個返回時,做值拷貝 class test test fun c 中,定義一個函式為bool型別有什麼用,return true 和return false 的區別在哪?獲取函式返回值 比如bool getvalue bool b ...

C語言程式設計 編寫返回值為指標型別的函式,實現將字串中小寫字母轉換為大寫字母

type fun cstring str1 c語言自己 將字串中小寫字母轉換為大寫字母 的庫函式吧 不用自己寫的 char transfer char str i return buffer c語言編寫函式將字串中的大寫字母轉換為小寫字母。用函式呼叫 char strcase switch char...

mybatis中插入語句的返回值是什麼型別

並不是一定要求有返回值的 mybatis框架中,sql語句的返回值問題 直接返回一個map就行了,map中的key就是查詢出的欄位名稱 可以直接返回物件 你配置一下別名 例 然後你在 mybatis的sql檔案中 更改查詢的返回值型別 也就版是resulttype myobject 權 就可以了,例...