函式呼叫結果
除非函式宣告為參考類型,否則函式呼叫會判斷值為右值。 具有參考傳回類型的函式會評估為左值,而且可以在指派陳述式的左邊使用,如下所示:
// expre_Function_Call_Results.cpp
// compile with: /EHsc
#include <iostream>
class Point
{
public:
// Define "accessor" functions as
// reference types.
unsigned& x() { return _x; }
unsigned& y() { return _y; }
private:
unsigned _x;
unsigned _y;
};
using namespace std;
int main()
{
Point ThePoint;
ThePoint.x() = 7; // Use x() as an l-value.
unsigned y = ThePoint.y(); // Use y() as an r-value.
// Use x() and y() as r-values.
cout << "x = " << ThePoint.x() << "\n"
<< "y = " << ThePoint.y() << "\n";
}
上述程式碼會定義稱為 Point 的類別,其中包含表示 x 和 y 座標的私用資料物件。 這些資料物件必須經過修改,而且必須擷取其值。 這個程式只是這種類別的數項設計之一,使用 GetX 和 SetX 或 GetY 和 SetY 則是另一種可能的設計方式。
傳回類別類型、類別類型的指標或類別類型的參考之函式可以做為成員選擇運算子的左運算元使用。 因此,下列程式碼是合法的:
// expre_Function_Results2.cpp
class A {
public:
A() {}
A(int i) {}
int SetA( int i ) {
return (I = i);
}
int GetA() {
return I;
}
private:
int I;
};
A func1() {
A a = 0;
return a;
}
A* func2() {
A *a = new A();
return a;
}
A& func3() {
A *a = new A();
A &b = *a;
return b;
}
int main() {
int iResult = func1().GetA();
func2()->SetA( 3 );
func3().SetA( 7 );
}
函式可以透過遞迴方式呼叫。 如需函式宣告的詳細資訊,請參閱函式規範和成員函式。 相關資料位於程式和連結中。