2015년 5월 11일 월요일

C++의 클래스(class) 객체의 생성

 이전 포스트에서 예로 들었던 다음과 같은 간단한 Rect 클래스가 선언되었다고 하자.
// 클래스 선언부
class Rect {
   public:
       int width, height;
       int getArea();
};
// 클래스 구현부
int Rect::getArea() {
   return width*height;
}


이것을 가지고 실제로 객에를 구현하는 방법에 대해 알아보자.


객체의 생성



 클래스가 선언되었다면 이제는 그것을 이용하여 실제 사용할 객체(object)를 생성할 수 있다.
Rect rect1;


이것을 실행하면 rect1 이라는 Rect 클래스를 구현한 객체가 생성되며 이것을 클래스의 객체, 혹은 인스턴스(instance)라고 칭한다. 클래스의 인스턴스의 이름은 일반적인 변수 규칙에 따른다.


 인스턴스가 생성되었다면 public 멤버들은 닷(.) 접근자로 접근할 수 있다. 인스턴스의 이름 바로 뒤에 닷을 찍고 멤버의 이름을 써주면 된다. 예를 들면 다음과 같다.


rect1.width = 10;
rect1.height = 15;
int area1 = rect1.getArea();
첫 번째 줄과 두 번째 줄은 멤버 변수 width 와 height 의 값을 10과 15로 설정하는 부분이고 세 번째 줄에서 getArea() 멤버 함수를 호출하여 지정한 값으로부터 면적을 계산하는 것이다. 결과값으로 area1 변수는 150 값을 가지게 될 것이다.
 클래스 Rect를 이용하여 얼마든지 새로운 객체를 생성할 수 있다. 마치 클래스 선언은 도장과 같고 객체 생성은 도장을 찍는 것과 같다. 얼마든지 객체를 생성할 수 있다.
Rect rect2, rect3, rect4;
rect2.width = rect2.height = 12;
rect3.width = rect3.height = 13;
rect4.width = rect4.height = 14;
이렇게 선언하고 값을 지정한 경우 rect2.getArea() 함수값과 rect3.getArea(), rect4.getArea() 함수값은 각각 어떤 값을 반환할 것인지 추측해 보자.

객체의 멤버 접근



 앞에서 언급한 대로 인스턴스를 이용하여 멤버를 접근할 때는 닷(.)을 사용한다.


Rect myRect, yourRect;
myRect.width = 10;
myRect.height = 20;
yourRect.width = 30;
yourRect.height = 40;
이때 myRect 와 yourRect 의 width 변수는 각각 완전히 별개의 변수이다. height 변수도 마찬가지로 서로 다른 변수이다. 클래스의 인스턴스가 생성되면 별도의 메모리에 멤버변수가 저장될 곳이 할당된다. 그리고 myRect.getArea() 함수가 내부적으로 접근하는 변수는 myRect에 할당된 width 와 height 이다. yourRect.getArea()도 yourRect 에 내부적으로 할당된 변수를 이용한다.





c{c++},n{c0018}

댓글 없음:

댓글 쓰기