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()函數,運行完後,這個一次性的無名對象就會銷燬,即調用析構函數。
同時,返回對象的話也不能在後續對它進行左值運算,編譯器通不過而且也毫無意義,因為之後程序員是沒法訪問到這個無名變量的
僅此個人觀點,有問題歡迎指正。
-
2017年3月計算機二級C語言考試摸底測試題
以下是yjbys考試網小編整理的2017年3月計算機二級C語言考試摸底測試題,希望對大家有所幫助,祝大家計算機二級考試順利通過。一、選擇題(每小題1分。)(1)程序流程圖中帶有箭頭的線段表示的是()。A.圖元關係B.數據流C.控制流D.調用關係(2)結構化程序設計的基本原則...
-
C語言if else語句彙總
對於很多情況,順序結構的代碼是遠遠不夠的,大家都接觸過C語言吧,下面是小編為大家整理的C語言ifelse語句,希望對大家有所幫助。C語言ifelse語句在C語言中,使用if和else關鍵字對條件進行判斷。請先看下面的代碼:#includeintmain(){intage;printf("請輸入你的年齡:");sc...
-
C語言精選面試題詳解
C語言是IT編程中最基礎的語言,在面試中,基本可以忽略又或者格外重要。下面是小編為大家整理的C語言精選面試題詳解,歡迎參考~分析這些面試題,本身包含很強的趣味性;而作為一名研發人員,通過對這些面試題的深入剖析則可進一步增強自身的內功。試題1:以下是引用片段:voi...
-
2017年計算機二級考試C語言備考題及答案
計算機二級對於很多考生來説還是比較有難度的,那麼怎樣順利通過二級考試呢?這就需要大家平時多練習和找方法了。以下是本站小編整理的2017年計算機二級考試C語言備考題及答案,希望對大家有幫助!1.(A)是構成C語言程序的基本單位。A、函數B、過程C、子程序D、子例...