當前位置:才華齋>計算機>C語言>

C++返回物件和返回引用

C語言 閱讀(1.94W)

C++返回物件和返回引用

C++返回物件和返回引用

引用的本質是對裸露的地址的二次包裝,它實際返回的還是一個變數或物件的地址,因此如果返回引用不可以返回區域性變數的,因為函式在返回之後,該變數就銷燬。下面是其C++返回物件和返回引用,一起來學習下吧:

 程式碼是對運算子*進行過載,返回引用和返回物件有不同的結果。

[cpp] view plain copy#include

using namespace std;

class A

{

public:

A() { cout << "A::A()" << endl;}//A建構函式

A(A& another){cout << "A(A& another)" << endl;}

~A(){ cout << "~A::A()" << endl;}//A解構函式

void func(){ cout << "class A::void func()" << endl;}

};

class B

{

public:

B(A* p) :_p(p){cout << "B::B()" << endl;}//B建構函式

~B(){ cout << "~B::B()" << endl; }//B解構函式

A operator*(){ //運算子過載*

return *_p;

}

private:

A* _p;

};

int main(){

A p1;

B p2(&p1);

(*p2)();

return 0;

}

中,返回的是A類的物件,之後會呼叫A中的拷貝構造器

A(A& another);

即用*_p的'值作為引數,在記憶體中構造一個新的物件,但它沒有名字,是無名物件,之後執行該無名物件中的func()函式,執行完後,這個一次性的無名物件就會銷燬,即呼叫解構函式。

同時,返回物件的話也不能在後續對它進行左值運算,編譯器通不過而且也毫無意義,因為之後程式設計師是沒法訪問到這個無名變數的

僅此個人觀點,有問題歡迎指正。