Presentation is loading. Please wait.

Presentation is loading. Please wait.

제 8장. 클래스의 활용 2012-1학기 프로그래밍언어및실습 (C++).

Similar presentations


Presentation on theme: "제 8장. 클래스의 활용 2012-1학기 프로그래밍언어및실습 (C++)."— Presentation transcript:

1 제 8장. 클래스의 활용 2012-1학기 프로그래밍언어및실습 (C++)

2 학습 목표 클래스의 객체를 생성하는 여러 가지 방법을 알아본다.
열거 상수나 typedef 정의를 클래스 안에서 사용하는 방법을 알아본다. 멤버 객체의 개념을 이해하고 멤버 객체를 사용하는 방법을 알아본다. 2012-1학기 프로그래밍언어및실습 (C++)

3 여러 가지 객체 생성 방법 객체 배열의 생성 및 사용 동적 객체의 생성 및 사용 동적 객체 배열의 생성 및 사용
동적 객체 배열의 생성 및 사용 객체에 대한 포인터 배열의 생성 및 사용 2012-1학기 프로그래밍언어및실습 (C++)

4 객체 배열의 생성 및 사용 객체 배열 정의 시 따로 지정하지 않으면 항상 디폴트 생성자로 초기화된다. 객체 배열의 초기화
{ } 안에 생성자 나열 Point arr[3]; // 디폴트 생성자로 초기화 Point arr[3] = {Point(10, 10), Point(20, 20), Point(30)}; 2012-1학기 프로그래밍언어및실습 (C++)

5 동적 객체의 생성 및 사용 동적으로 객체를 생성하려면 new 연산자를 사용한다.
동적으로 생성된 객체는 사용이 끝나면 반드시 delete로 해제해야 한다. delete 연산자로 동적으로 생성한 객체를 해제할 때 소멸자가 호출된다. Point *p1 = new Point; // 디폴트 생성자로 초기화 Point *p2 = new Point(10, 20); // 생성자의 인자 전달 Point *p3 = new Point(); // 디폴트 생성자로 초기화 2012-1학기 프로그래밍언어및실습 (C++)

6 동적 객체 배열의 생성 및 사용 new 연산자를 이용해서 동적으로 객체 배열을 생성할 수도 있다.
동적 객체 배열의 생성 및 사용 new 연산자를 이용해서 동적으로 객체 배열을 생성할 수도 있다. 동적 객체 배열도 일반 객체 배열처럼 [ ]를 이용해서 배열의 원소에 접근한다. 동적 객체 배열은 항상 디폴트 생성자로 초기화하며, 만일 클래스가 디폴트 생성자를 제공하지 않으면 동적 객체 배열을 생성하는 것은 불가능하다. 동적 객체 배열은 delete []로 해제한다. Point *arr = new Point[3]; // 동적 객체 배열 for(int i = 0 ; i < 3 ; i++ ) arr[i].Print(); // 또는 (arr+i)->Print(); delete[] arr; 2012-1학기 프로그래밍언어및실습 (C++)

7 객체에 대한 포인터 배열의 생성 및 사용 객체에 대한 포인터 배열을 정의 시 객체는 생성되지 않는다.
포인터 변수만 미리 준비해 두고 객체는 프로그램 실행 중에 꼭 필요한 순간에 생성할 수 있다. Point *arr[3] = { new Point(10, 10), new Point(20, 20), new Point(30, 30) }; for(int i = 0 ; i < 3 ; i++ ) arr[i]->Print(); // arr[i]는 객체에 대한 포인터이므로 -> 사용 2012-1학기 프로그래밍언어및실습 (C++)

8 클래스와 열거 상수 (1) 특정 클래스에서만 사용되는 열거형이나 열거 상수가 있다면 열거형의 정의나 열거 상수의 정의를 클래스 정의 안에 포함시킬 수 있다. class Point { public: enum COLOR {red, green, blue}; protected: ... COLOR m_color; void SetColor(COLOR color); Point(int x = 0, int y = 0, COLOR color = red); }; 2012-1학기 프로그래밍언어및실습 (C++)

9 클래스와 열거 상수 (2) 클래스 안에 정의된 열거형이나 열거 상수는 “클래스 이름::열거 상수”의 형식으로 접근해야 한다.
열거형이나 열거 상수가 해당 클래스에 public일 때만 가능 int main() { Point p1(10, 10, Point::blue); cout << "p1 = "; p1.Print(); cout << "\n"; return 0; } 2012-1학기 프로그래밍언어및실습 (C++)

10 클래스와 typedef 특정 클래스에서만 사용되는 typedef 정의도 클래스 정의 안에 포함한다.
#define INT_COORD class Point { public: #ifdef INT_COORD typedef int CoordType; #else typedef double CoordType; #endif ... protected: CoordType m_x, m_y; void SetXY(CoordType x, CoordType y); Point(CoordType x = 0, CoordType y = 0, COLOR color = red); }; 2012-1학기 프로그래밍언어및실습 (C++)

11 멤버 객체 다른 클래스의 객체를 멤버 변수로 사용 HAS-A 관계
Line 클래스는 Point 클래스와 HAS-A 관계이다. Line 클래스가 Point 클래스를 “가지고 있다”는 것은 Point 클래스의 객체를 멤버로써 가지고 있다는 의미이다. class Line { protected: Point m_start, m_end; ... }; 2012-1학기 프로그래밍언어및실습 (C++)

12 Line 클래스의 예 (1) class Point { protected: int m_x, m_y; public:
void Print() const; void SetXY(int x, int y); bool IsEqual(const Point& p) const; Point(int x = 0, int y = 0); friend class Line; }; class Line Point m_start, m_end; void Set(const Point& begin, const Point& end); double GetLength() const; 2012-1학기 프로그래밍언어및실습 (C++)

13 Line 클래스의 예 (2) int main() { Line line1;
cout << "생성 직후의 line1 : "; line1.Print(); line1.Set(Point(10, 10), Point(40, 50)); cout << "변경된 line1 :"; cout << "line1의 길이 : " << line1.GetLength() << "\n"; return 0; } 2012-1학기 프로그래밍언어및실습 (C++)

14 멤버 객체의 초기화 멤버 객체는 객체이므로 생성할 때 별도로 지정하지 않으면 디폴트 생성자에 의해서 초기화된다.
멤버 객체의 생성자에 인자를 전달하려면 초기화 리스트를 사용한다. 2012-1학기 프로그래밍언어및실습 (C++)

15 정리 클래스의 객체를 생성하는 방법은 다양하다. 객체의 배열을 생성하거나 객체를 동적으로 생성할 수 있다.
클래스의 객체를 생성할 때 따로 초기화하지 않으면 항상 디폴트 생성자에 의해서 초기화된다. 클래스에 관련된 열거 상수의 정의나 typedef 정의를 클래스 안에 포함할 수 있다. 클래스 안에 정의된 열거 상수나 typedef에 접근하려면 클래스 이름과 함께 사용한다. 클래스가 다른 클래스의 객체를 멤버 변수로 사용할 때 이것을 멤버 객체라고 한다. 클래스와 멤버 객체로 사용되는 클래스 사이에는 has-a 관계가 성립한다. 2012-1학기 프로그래밍언어및실습 (C++)


Download ppt "제 8장. 클래스의 활용 2012-1학기 프로그래밍언어및실습 (C++)."

Similar presentations


Ads by Google