함수 호출 결과
함수가 참조 형식으로 선언되지 않은 경우 함수 호출은 r-value로 평가됩니다. 참조가 있는 함수는 l-values로 평가하고 대입문의 왼쪽에서 다음과 같이 사용될 수 있습니다.
// 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";
}
앞의 코드는 x 및 y 좌표를 나타내는 전용 데이터 개체를 포함하는 Point라는 클래스를 정의합니다. 이러한 데이터 개체를 수정하고 해당 값을 검색해야 합니다. 이 프로그램은 이러한 클래스를 위한 여러 디자인 중 하나이며, 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 );
}
함수를 재귀적으로 호출할 수 있습니다. 함수 선언에 대한 자세한 내용은 함수 지정자 및 멤버 함수를 참조하십시오. 관련 자료는 프로그램 및 링크에 있습니다.