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()函數,運行完後,這個一次性的無名對象就會銷燬,即調用析構函數。
同時,返回對象的話也不能在後續對它進行左值運算,編譯器通不過而且也毫無意義,因爲之後程序員是沒法訪問到這個無名變量的
僅此個人觀點,有問題歡迎指正。
相關文章
-
C語言函數的參數和返回值
C 語言可以象彙編語言一樣對位、字節和地址進行操作。那麼大家知道C語言函數的參數和返回值是什麼呢?下面一起來看看!如果把函數比喻成一臺機器,那麼參數就是原材料,返回值就是最終產品;函數的作用就是根據不同的參數產 -
Excel中如何返回單元格引用或單元格位置
在Excel的使用中,使用什麼函數能夠返回單元格引用或單元格位置?具體該如何去操作呢?下面小編就爲大家詳細介紹一下,不會的朋友可以參考本文,希望能對大家有所幫助!1、在Excel中返回單元格引用或單元格位置需要用到Address函 -
C語言函數的返回值
函數的返回值是指函數被調用之後,執行函數體中的程序段所取得的並返回給主調函數的.值。C語言函數的返回值1、函數的值只能通過retu語句返回主調函數。retu語句的一般形式爲:1retu 表達式 retu (表達式); 2、函數值的類 -
C語言函數返回值解析
人事部是一個企業或者團體的人力資源和企業公共事務的管理部門 。現在爲強化人的重要性,分離出人力資源部門。本文《20xx行政人事部年度工作計劃》由本站爲您整理,僅供參考!行政人事部年度工作計劃新的一年意味着新的起 -
excel表格中做導航目錄和返回按鈕方法
如果一個工作簿中有多個工作表,一般需要一個總表或登陸界面來設置超鏈接方便跳轉,如下圖所示效果。本例教大家如何製作一個登陸界面和返回登陸界面的超鏈接。1、舉例來說,工作不中包含一個“登陸界面”表和若干個其他工 -
C語言返回多個值的方法
導語:編寫有多個返回值的函數是所有C語言教材裏均沒有提到的知識點,但在實際教學與應用的過程中我們都有可能會遇到這樣的問題。以下是引導學生採用的三種不同方法編寫多個返回值的C語言函數,一起來學習下吧: 方法1:利用 -
C語言函數說明與返回值
導語:在C語言中,函數是程序的基本組成單位,因此可以很方便地用函數作爲程序模塊來實現C語言程序。下面就由小編爲大家介紹一下C語言函數說明與返回值,歡迎大家閱讀!函數的一般形式是:type-specifier function_name(para -
如何實現C語言多個函數值的返回
導語:C語言中一般情況下函數值的返回都是通過retu語句來實現的,但是retu語句每次調用只能返回一個函數值,當要返回多個函數值時就必須用其它途徑來間接的進行處理。 下面就由小編爲大家介紹一下如何實現C語言多個函數值 -
C語言中返回字符串函數的實現方法
C語言中返回字符串函數的實現方法你知道嗎?相信很多人都想了解,下面小編給大家介紹C語言中返回字符串函數的`實現方法,歡迎閱讀! C語言中返回字符串函數的實現方法 有四種方式:1。使用堆空間,返回申請的堆地址,注意 -
excel公式錯誤返回值
在excel2007中,如果輸入的公式不符合要求,將無法正確地計算結果,此時會在單元格顯示錯誤信息。下面小編介紹一下各種錯誤及其出現的原因。 ①#DIV/0錯誤公式中的除數爲0。也有可能除數引用了空單元格或除數引用了公式