Výsledky volání funkce
Volání funkce vyhodnocuje r hodnotu, pokud není funkce deklarována jako typ odkazu.Funkce s návratový typem ve formě odkazu vyhodnocuje l hodnoty a lze ji použít na levé straně příkazu přiřazení následujícím způsobem:
// 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";
}
Předcházející kód definuje třídu s názvem Point, která obsahuje objekty se soukromými daty představující souřadnice x a y.Tyto datové objekty musí být upraveny a jejich hodnoty vráceny.Tento program je pouze jedním z několika vzorů pro třídu. Použití funkcí GetX a SetX nebo GetY a SetY představuje další možný vzor.
Funkce vracející typy třídy, ukazatele na typy třídy nebo odkazy na typy třídy lze použít jako levý operand pro operátory výběru členů.Proto je následující kód platný:
// 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 );
}
Funkce lze volat rekurzivně.Další informace o deklaraci funkcí naleznete v tématech Specifikátory funkce a Členské funkce.Související materiál se nachází v tématu Program a propojení.