c 返回類物件

2021-08-20 19:35:32 字數 2291 閱讀 2172

函式返回值是乙個類物件時,有以下幾種選擇:

1,返回物件或者物件的引用 2,它們是const的or not

1,返回物件的const引用,舉例:

#include #include using namespace std;

class complx //建構函式

complx(double r, double i): real(r), imag(i) {}//帶引數的建構函式

complx operator+(const complx & c) const

complx & operator=(const complx &c;)

friend ostream& operator<<(ostream &os;, const complx &c;);

double size() const

};ostream & operator<<(ostream &os;, const complx & c)

/*方式1,直接返回類物件

complx maximum(const complx &c1;, const complx &c2;)

*///方式二,返回類物件的引用

const complx & maximum(const complx &c1;, const complx &c2;)

int main( )

得到以下結果:

c1 = (10,30)

c2 = (13,25)

maximum(c1,c2) = (10,30)

(20,40) got its value from c3

c6 (c1+c2) = (23,55)

上面的方式12都可以,我們用的方式2.因為用引用省去了拷貝(即呼叫拷貝建構函式)的過程。(返回值型別是引用:那就返回物件的引用;返回值型別直接是類物件:返回的是物件的副本。所以用引用會效率高一些,不用拷貝)另外,因為我們的引數使用的是const型的引用,所以返回值也是const型的,以匹配。(這句話我沒懂,為什麼返回值非得匹配呢)

2,返回物件的非cons引用

這種用法常見於過載賦值操作符=,和流操作符<<,過載它們,其實返回物件或物件引用都行,引用好一些。關於這部分,建議複習一下操作符過載。

比如鏈式的賦值:

complx c3 (20,40);

complx c4,c5;

c5 = c4 = c3;

c4=c3也就是c4.operator=(c3)也就是operator=(complx &c4,complx &c3)也就是

complx &operator=(complx &c4,complx &c3)

被賦給c5。這個例子裡返回值型別就不是const的,因為c4是要被改變的。

鏈式的輸出:

cout << c4 << " got its value from c3" << endl;
cout<

3,返回類物件

如果返回的物件是所呼叫函式的區域性物件,那它就不應該被以引用的方式返回,因為在這個函式呼叫結束的時候區域性物件會自動消除,所以不用我們管。也因此,我們絕對不能返回乙個區域性物件的引用,因為函式呼叫完的時候它已經不存在了。

舉例:

const complx &complxreturn;(const complx & c)
這裡complxobj就是乙個區域性變數,我們想得到它,只能返回它的拷貝,不能返回引用。

4,返回const類物件

通常,不建議用

const

修飾函式的返回值型別為某個物件或對某個物件引用的情況。

原因如下:如果返回值為某個物件為

const

(const a test = a

例項)或某個物件的引用為

const

(const a& test = a

例項) ,則返回值具有

const

屬性,則返回例項只能訪問類

a中的公有(保護)資料成員和

const

成員函式,並且不允許對其進行賦值操作,這在一般情況下很少用到。

總結:1,如果函式返回的是區域性變數,那麼返回值型別不能是引用或指標。

2,如果函式返回的是類物件,但是該類沒有public的拷貝建構函式,比如ostream類,那就返回引用。

3,有的函式,比如過載的=,可以返回物件也可以返回引用,引用比較好,因為效率高。

再總結:除了返回區域性物件,一般都是返回引用。

(寫的比較亂,還會再改)

C 類成員函式返回類的物件

1.類成員函式臨時物件 2.類成員函式返回持久物件 3.類成員函式返回指標 類成員函式返回類的物件 include include using namespace std class a str1 無參構造str1 str2 無參構造str2 cout 無參構造呼叫 void setarr a in...

C 返回物件

使用const引用的常見原因在於提高效率。方式1vector max const vector v1,const vector v2 方式2 const vector max const vector v1,const vector v2 這裡需要注意三點 首先,返回物件將會呼叫複製建構函式,而返回...

C 返回物件和返回引用

最大的區別在於,返回物件的話會在記憶體中根據返回的型別開闢一塊區域,用返回的值對該記憶體進行初始化,如果是返回的物件,利用拷貝構造來初始化這個區域,但是這塊區域並沒有名字,就是說之後使用者沒辦法訪問到這個區域,也成為無名變數,它只能在接下來的 中進行一次性的用途,要不作為引數傳遞,或者將值列印,再之...