함수로 객체 전달

객체 지향 프로그래밍에서 함수를 호출할 때, 객체를 전달하는 것은 상당히 자주 등장한다. 객체가 함수로 전달될 때, 정확하게 알고 있는 것이 바람직하다.

함수로 인수를 전달하는 방법에는 다음과 같은 2가지 방법이 있다.

  1. 값의 의한 호출 복사본을 전달하는 것
  2. 참조에 의한 호출 주소지를 공유하는 것

지금부터는 함수로 객체를 전달하는 것을 살펴볼 것이다.

함수는 매개변수의 값에 무언가를 대입 했을 때, 그에 따른 값을 반환하는 것이라고 생각해볼때,

객체를 변수로 받아 객체를 반환한다.

지금부터 함수로 객체를 전달하거나, 함수로부터 객체를 반환받는 방법을 살펴본다.

객체를 함수로 전달하는 코드이다

#include <iostream>
using namespace std;
class Pizza {
	int radius;
public:
	Pizza(int r= 0) : radius{ r } { }
	~Pizza() { }
	void setRadius(int r) { radius = r; }
	void print() { cout << "Pizza(" << radius << ")" << endl; }
};
void upgrade(Pizza p) //파라미터가 객체 타입으로 설정되어있다.
{ p.setRadius(20); }

int main() {
	Pizza obj(10); //복사되는 개념, radius에는 10이 저장된다.
	upgrade(obj); //함수 호출
	obj.print();//과연 obj의 값은?
	return 0;
}

실행결과 Pizza(10)이 출력된다 왜 그럴까? 분석해보자

반지름이 10인 Pizza객체가 생성되고

upgrade()함수가 호출되고 이 함수는 객체를 파라미터로 받는다.

upgrade()함수는 반지름이 20인 피자로 변경하는 함수이다.

하지만 출력은 여전히 10인 피자가 출력된다.

이를 통해 객체를 함수로 전달하면 ‘값에 의한 호출’ 이 적용되어