while (1): study();
구조체에 대한 new & delete 연산 본문
728x90
typedef struct __Point
{
int xpos;
int ypos;
} Point;
위의 구조체를 기반으로 두 점의 합을 계산하는 함수를 다음의 형태로 정의하고
Point& PntAdder(const Point& p1, const Point& p2);
임의의 두 점을 선언하여, 위 함수를 이용한 덧셈연산을 진행하는 main함수를 정의해보자. 단, 구조체 Point 관련 변수의 선언은 무조건 new연산자를 이용해서 진행해야 하며, 할당된 메모리 공간의 소멸도 철저해야 한다.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
typedef struct __Point
{
int xpos;
int ypos;
} Point;
Point& PntAdder(const Point& p1, const Point& p2);
int main(void)
{
Point* pp1 = new Point;
Point* pp2 = new Point;
cout << "첫 번째 좌표를 입력하세요." << endl;
cin >> pp1 -> xpos >> pp1 -> ypos;
cout << "두 번째 좌표를 입력하세요." << endl;
cin >> pp2 -> xpos >> pp2 -> ypos;
Point& res = PntAdder(*pp1, *pp2);
delete pp1;
delete pp2;
cout << "[ 결 과 ]" << endl;
cout << res.xpos << ' ' << res.ypos << endl;
delete &res;
return 0;
}
Point& PntAdder(const Point& p1, const Point& p2)
{
/* 지역변수는 사라지지만 할당된 공간은 남아있으므로
반환값 참조자의 주소 연산을 통해 해제해줘야함. */
Point* pres = new Point;
pres -> xpos = p1.xpos + p2.xpos;
pres -> ypos = p1.ypos + p2.ypos;
return *pres;
}
728x90
'학습 > C, C++' 카테고리의 다른 글
[C++]'const char [14]'에서 'char *'(으)로 변환할 수 없습니다. (0) | 2021.12.19 |
---|---|
[C++] 정보은닉과 캡슐화 (0) | 2021.12.19 |
[C++] call-by-address와 call-by-reference (0) | 2021.12.18 |
[C++]함수 오버로딩 (0) | 2021.12.17 |
사칙연산 계산기 (0) | 2021.12.16 |
Comments