관리자 글쓰기
C++ 클래스와 객체3
2022. 5. 12. 11:53 - pingu-s

인수와 객체

 

(1) 인수로서 객체 사용

 

다음의 함수와 객체의 관계를 살펴보도록 한다. 함수의 인수로서 객체를 사용해 보는 것으로 한다. 다음의 코드를 입력해 보도록 한다.

 

예제 12-4) 함수의 인수로서 객체의 사용

예제 12-2의 House 클래스에서 인라인 함수를 사용하여 멤버 space를 출력하는 코드를 작성하도록 한다.

#include <iostream>
using namespace std;

//House 클래스의 선언
class House{
private:
	const char* address;
	int space;
	const char* telephone;
public:
	int getSpace() //int형의 인라인 함수를 정의한다.
	{
		return space;
	}
	void show();
	void setSpace(const char* add, int space_num, const char* tel);
};

//House 클래스의 멤버 함수 정의
void House::show()
{
	cout << "집의 주소는 " << address << "입니다.\n";
	cout << "집의 평수는 " << space << "평입니다.\n";
	cout << "집의 전화번호는 " << telephone << "입니다.\n";
}

void House::setSpace(const char* add, int space_num, const char* tel)
{
	if (space_num > 0 && space_num < 2000) {
		address = add;
		space = space_num;
		telephone = tel;
		cout << "주소는 " << address << ", 평수는 " << space << "이고, 전화번호는 "
			<< telephone << "로 하였다.\n";
	}
	else {
		cout << space_num << "은(는) 올바른 평수가 아니다.\n";
		cout << "평수를 변경할 수 없다.\n";
	}
}

void function1(House h);

int main()
{
	House my_house;

	my_house.setSpace("부산시 남구 대연3동", 64, "051-629-0001");

	function1(my_house);  //main() 함수에서 function1() 함수를 수행한다.

	return 0;
}

void function1(House h) //...③
{
	int spc = h.getSpace();

	cout << "평수가 " << spc << "인 집을 구매했습니다.\n";
}

③ function1() 함수를 정의한다. 이 함수와 같이 객체를 인수로 사용하면 각 멤버의 값이 복사되어 함수 내에 전달된다. 즉, 여기에서는 객체의 멤버인 space의 값이 복사되어 함수에 전달되는 것처럼 되어 있다. 이것은 구조체를 인수로 사용한 경우와 똑같다.

 

(2) 인수로서 객체에서의 포인터 사용

 

또 객체의 경우도 많은 멤버를 가질 때에는 함수 호출이 지연되는 경우가 있다. 이와 같은 경우에는 인수로서 객체에서의 포인터를 이용하는 것으로 한다. 인수로 포인터를 사용하면 객체의 주소만 전달되는데 멤버마다의 복사가 수행되지 않고 큰 클래스의 경우에는 처리 속도가 향상되는 것이다.

 

예제 12-5) 포인터를 함수의 인수로 사용

예제 12-4의 function1() 함수의 인수를 House 클래스의 객체로의 포인터로서 정의한다. 클래스의 선언과 클래스 멤버 함수의 정의 부분은 예제 12-4와 같기 때문에 생략한다.

......
//function1() 함수의 선언
void function1(House *ph); //function1() 함수의 인수를 포인터로 선언한다.

int main()
{
	House my_house;

	my_house.setSpace("부산시 남구 대연3동", 64, "051-629-0001");

	function1(&my_house);

	return 0;
}

//function1() 함수의 정의
void function1(House *ph) //포인터를 인수로 한 함수를 정의한다.
{
	int spc = ph->getSpace(); //화살표 연산자를 사용해서 멤버에 접근한다.

	cout << "평수가 " << spc << "인 집을 구매했습니다.\n";
}

이 코드에서는 my_house의 주소를 넘기고 함수를 호출하고 있다. 함수 내에서는 화살표 연산자를 사용해서 멤버에 접근한다. 실행 결과는 예제 12-4와 같다.

 

예제 12-6) 참조를 함수의 인수로 사용

예제 12-5와 같은 효과는 참조를 인수로 하는 경우에도 얻을 수 있다. 다음 문제는 예제 12-5의 function1() 함수를 House 클래스의 객체로의 참조로 정의한 것이다. 함수 내에서는 도트 연산자를 사용해서 멤버에 접근한다.

......
//function1() 함수의 선언
void function1(House &rh); //function1() 함수의 인수를 참조로 선언한다.

int main()
{
	House my_house;

	my_house.setSpace("부산시 남구 대연3동", 64, "051-629-0001");

	function1(my_house); //main 함수에서 function1() 함수를 호출한다.

	return 0;
}

//function1() 함수의 정의
void function1(House &rh)
{
	int spc = rh.getSpace(); //참조를 인수로 하는 function1() 함수를 정의한다.

	cout << "평수가 " << spc << "인 집을 구매했습니다.\n";
}

 

 

출처: 박흥복서정희. 2015. C++ 프로그래밍 (초보자를 위한). 문운당

'개발 > C++' 카테고리의 다른 글

C++ 생성자와 정적 멤버2  (0) 2022.05.12
C++ 생성자와 정적 멤버  (0) 2022.05.12
C++ 클래스와 객체2  (0) 2022.05.11
C++ 클래스와 객체  (0) 2022.05.07
C++ 열거형, 구조체, 공용체2  (0) 2022.05.04