1. 문제

 

3. 다음 Circle 클래스가 있다.

 

Circle 객체 b를 a에 더하여 a를 키우고자 다음 함수를 작성하였다.

 

다음 코드를 실행하면 increaseBy() 함수는 목적대로 실행되는가?

 

main() 함수의 목적을 달성하도록 increaseBy() 함수를 수정하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
using namespace std;

class Circle;
void increaseBy(Circle &a, Circle b);

class Circle {
	int radius;
public :
	Circle(int r) { radius = r; }
	int getRadius() { return radius;}
	void setRadius(int r) { radius = r; }
	void show() { cout << "반지름이 " << radius << "인 원" << endl; }
};

void increaseBy(Circle &a, Circle b) {
	int r = a.getRadius() + b.getRadius();
	a.setRadius(r);
}

int main() {
	
	Circle x(10), y(5);
	increaseBy(x, y);
	x.show();
}

 

 

4. 설명

 

문제 해결 전 주어진 void increaseBy(Circle a, Circle b)를 보면 어느 값도 return 하지 않는 void형 입니다.

 

그런데 매개변수들도 보면 둘 다 값에 의한 호출로서, 이 함수 increaseBy()에서 어떤 명령을 실행시켜도 increaseBy() 함수 공간에서만 실행되고 이 함수가 끝나면 increaseBy() 공간이 사라지게 됩니다.

 

 

그러므로 변한 값이 유지되도록 값이 변경될 Circle a를 값에 의한 호출이 아닌 참조에 의한 호출로서 바꾸어 주어서 increaseBy()함수 내에서 Circle a의 변한 값이 유지되도록 만들어 줍니다.

 

+ Recent posts