영넌 개발로그

[C++ 기초] 객체를 함수의 인수로 전달하는 방식 본문

코딩/C++

[C++ 기초] 객체를 함수의 인수로 전달하는 방식

영넌 2020. 12. 4. 04:34

객체를 함수의 인수로 전달하는 방식은 크게 보면 2가지, 자세히 보면 3가지가 있다.

1. call by valuew

복사본이 넘어가서 오퍼레이션이 행해지고 함수 종료 후, 복사본은 소멸 되고 원래의 객체 값은 변하지 않는다.

2. call by reference(address)

객체의 주소를 넘겨주면, 주소 값을 변경시킬 수 있다. 함수 종료 후에 객체 내용은 변해 있다.

포인터의 일종이라고 생각하면 된다.

3. call by reference variable

 

예시 코드 >

 

기본 Car class

class Car
{
private:
	int year;
public:
	Car(int _year) : year(_year) {	}
	void showYear()
	{
		cout << "This car was made in " << year << endl;
	}
	void changeYear(int _y) {
		year = year - _y;
	}
};

 

 

call by value

결과 값 : 2010 2000 2010

void changeCarYear(Car _c) {  //call by value, 복사
	_c.changeYear(10);
	_c.showYear();
}


int main() {
	Car c(2010);
	c.showYear();
	
	changeCarYear(c);
	c.showYear();
	return 0;
}

 

calll by reference

결과 값  : 2010 2000 2000

void changeCarYear(Car* _c) {  //call by refernece
	_c->changeYear(10);
	_c->showYear();
}

int main() {
	Car c(2010);
	c.showYear();
	
	changeCarYear(&c);
	c.showYear();
	return 0;
}

 

call by reference variable

결과 값 : 2010 2000 2000

void changeCarYear(Car& _c) {  //call by refernece variable
	_c.changeYear(10);
	_c.showYear();
}

int main() {
	Car c(2010);
	c.showYear();
	
	changeCarYear(c);
	c.showYear();
	return 0;
}

Comments