인수와 객체
(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 |