#include <iostream>
using namespace std;
typedef struct __point
{
int xpos;
int ypos;
}Point;
Point& PntAdder(const Point& p1, const Point& p2);
Point& PntAdder(const Point& p1, const Point& p2)
{
Point* tp = new Point;
tp->xpos = p1.xpos + p2.xpos;
tp->ypos = p1.ypos + p2.ypos;
return *tp;
}
int main()
{
Point p1 = { 1,2 };
Point p2 = { 2,3 };
Point &np=PntAdder(p1,p2);
cout<<"("<<np.xpos <<","<< np.ypos<<")" << endl;
delete &np;
}
- 함수 내에 선언된 변수를 참조형으로 반환하려면 해당 변수는 어떻게 선언해야 하는가?
- 지역변수를 그대로 반환하면 함수 종료와 동시에 소멸하기 때문에 남아있도록 하는 동적할당을 통해 선언해야함.
- 동적할당 한 변수를 함수의 참조형 매개 변수의 인자로 어떻게 전달해야 하는가?
- 해당 동적할당한 변수의 포인터를 함수의 인자로 전달해야한다.
#include <iostream>
using namespace std;
typedef struct __point
{
int xpos;
int ypos;
}Point;
Point PntAdder(const Point p1, const Point p2)
{
Point tp;
tp.xpos = p1.xpos + p2.xpos;
tp.ypos = p1.ypos + p2.ypos;
return tp;
}
int main()
{
Point p1 = { 1,2 };
Point p2 = { 2,3 };
Point np=PntAdder(p1,p2);
cout<<"("<<np.xpos <<","<< np.ypos<<")" << endl;
}
**참고사항**
다르게 사용하는 이유 (참조형으로 반환하는 이유)
단순한 복사가 아니라 참조(call-by-reference)를 통해 나중에 값이 큰값을 복사하는대신에 참조를 통해 전달하므로 성능 향상에 도움이 된다. 또한 추후 상속을 사용할때 포인터로 반환하면 파생이 유리하다.그리고 단순하게 함수가 끝난후에도 동적할당으로 생성된 객체는 해제 전까지 소멸되지않는다.
'C++' 카테고리의 다른 글
문제 03-1 [구조체 내에 함수정의하기] (0) | 2024.08.02 |
---|---|
문제 02-4 [C++의 표준함수 호출] (0) | 2024.08.01 |
문제 02-2 [const 포인터와 const 참조자] (0) | 2024.08.01 |
문제 02-1 [참조자 기반의 Call-by-reference 구현] (0) | 2024.08.01 |
문제 01-2 [함수 오버로딩] (0) | 2024.07.31 |