4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and...

22
C++ 프로그래밍 입문 4장 클래스와 객체 클래스와 객체 public과 private 구조체와 클래스 객체의 생성과 생성자 객체의 소멸과 소멸자 생성자와 소멸자의 호출 순서 디폴트 생성자와 디폴트 소멸자 멤버 초기화 멤버 함수의 외부 정의 멤버 함수의 인라인 함수 선언

Transcript of 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and...

Page 1: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

C++ 프 그래 문

4 클래스 객체

클래스 객체

public과 private

조체 클래스

객체 생 과 생

객체 과

생 호출 순

폴트 생 폴트

초 화

함수 정

함수 라 함수

Page 2: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 1

1. 클래스 객체

추 형 : (attribute) + 드 (method)

n : 동차 과 드

n 조체, 공 체, typedef 역시 추 형에 포함

à 정 형(user-defined type)

C++ : 주 class 현

Page 3: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 2

1. 클래스 객체

타 à 수, 클래스à 객체

n 객체 : 본적 는 수 생 과 동

ØCar MyCar, YourCar;

ØMyCar. = Red;

: Car 클래스 현

n : 수

n 드 : 함수

class Car {int m_color; // 색상int m_CC; // 배 량int m_speed; // 도

void Accelerate() { m_speed++; }// 가void Stop() { } // 춤void TurnOn() { } // 시동켜

};

int main(void){

Car MyCar1, MyCar2; // 객체 생MyCar1.m_speed = 0;MyCar2.m_CC = 1000;MyCar1.Accelerate(); // 버 함수 호출

return 0;}

Page 4: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 3

1. 클래스 객체

Car 클래스 제에 객체들 조 (개념적 현)

n 각 객체 수 함수 생

n MyCar1.Accelerate() à MyCar1 수 m_speed 값 가

실제 는 객체 수가 생 만 함

수는 단 하나만 생 à 5.3절

class Car {int m_color; // 색상int m_CC; // 배 량int m_speed; // 도

void Accelerate() { m_speed++; } // 가void Stop() { } // 춤void TurnOn() { } // 시동켜

};

int main(void){

Car MyCar1, MyCar2; // 객체 생MyCar1.m_speed = 0;MyCar2.m_CC = 1000;MyCar1.Accelerate(); // 버 함수 호출

return 0;}

Page 5: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 4

2. public과 private

Car 클래스 제 컴파 à 에러 생

정보 닉 : 클래스 내 에 한 접근 제

n public : 접근 가능

n private : 접근

à 보호

: Car 클래스

class Car {private :

int m_color; // 색상int m_CC; // 배 량int m_speed; // 도

public :void Accelerate() { m_speed++; }// 가void Stop() { } // 춤void TurnOn() { } // 시동켜

};

int main(void){

Car MyCar1, MyCar2;//MyCar1.m_speed = 0;//MyCar2.m_CC = 1000;MyCar1.Accelerate();

return 0;}

private 역

public 역

private 에 한

접근 가

private 에 한

내 접근 허

private, public 여러 나 수

private 후 : private 역

public 후 : public 역

주 수는 private ,

함수는 public .

드시 그럴 필 는 .

클래스 시 에 private, public

à 폴트 private 식

Page 6: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 5

3. 조체 클래스

: 평 한 점 나타내는 Point 조체 만들

C++ 조체는 클래스 99.8% 동

n 수 함수 포함 가능

n private, public 역 정 가능

struct Point { // 평 상의 좌표(x, y)를 나타내는 구조체int x;int y;

};

int main(void){

Point P1;P1.x = 3;P1.y = 4;

cout << P1.x << " " << P1.y << endl;

return 0;}

조체는 폴트 접근 허 (public)

Page 7: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 6

3. 조체 클래스

: 조체 클래스처럼 하

struct Point {private :

int x;int y;

public :void SetXY(int a, int b) { x = a; y = b; }void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

int main(void){

Point P1;P1.SetXY(3, 4);P1.Print();

return 0;}

조체 클래스 차 점 2가

1. private, public 정 하 경

- 클래스 : 폴트 private

- 조체 : 폴트 public

2. : 8

조체 클래스 것 쓸 것 가?

à개 적 취향에 라 택

- public 수만 포함à 조체

- 함수 포함 또는 private 포함à클래스

Page 8: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 7

4. 객체 생 과 생

수 초 화 : 다 2가 차 점 ?

n int a; a = 100;

n int a = 100;

조체 수 초 화

쓰 값 초 화한 후 문에 해 100 경

생 과 동시에 100 초 화

struct Point {int x;int y;

};

int main(void){

Point P1 = { 3, 4 }; // 구조체 변수의 초 화

return 0;}

Page 9: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 8

4. 객체 생 과 생

클래스 객체 초 화 : 다 프 그램 문제점 ?

class CPoint {private :

int x;

public :int y;

};

int main(void){

CPoint P1 = { 3, 4 }; // X, 버 변수 x가 private이므로 직접 접근 불가능

return 0;}

클래스 객체 생 과 동시에 수 값

초 화하는 à생

Page 10: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 9

4. 객체 생 과 생

n 종 함수. 객체가 생 드시 생 가 호출

n 생 에 한 제 항

Ø 생 클래스 과 같다.

Ø 환형 것 환하 는다.

Ø 매개 수는 함수 찬가 게 수 다.

Ø 생 해 다 한 생 만들 수 다.

Ø 폴트 매개 수 할 수 다.

class CPoint {private :

int x;int y;

public :CPoint(int a, int b) { x = a; y = b; } // 생 자void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

Page 11: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 10

4. 객체 생 과 생

생 호출

n 객체 생 시 매개 수 전달

int main(void)

{

CPoint P1 = CPoint(3, 4);

CPoint P2(5, 6);

P1.Print();

P2.Print();

return 0;

}

다 객체 생

첫 째는 님!

주 째 스타 .

Page 12: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 11

4. 객체 생 과 생

생 : 여러 개 생 가능

class CPoint {private :

int x;int y;

public :CPoint(int a, int b) { x = a; y = b; } // 생 자1, 2개의 매개변수CPoint(int a) { x = a; y = 0; } // 생 자2, 1개의 매개변수void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

int main(void){

CPoint P1(3, 4); // 생 자1 사CPoint P2(5); // 생 자2 사CPoint P3 = 6; // 6 => CPoint(6)변환, 변환 시 생 자2 사

P1.Print();P2.Print();P3.Print();

return 0;}

생 매개 수가하나 경

같 가능à묵시적 형 환 해 수행

Page 13: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 12

4. 객체 생 과 생

폴트 매개 수 가능

class CPoint {private :

int x;int y;

public :CPoint(int a, int b = 0) { x = a; y = b; } // 생 자void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

int main(void){

CPoint P1(3, 4);CPoint P2(5);CPoint P3 = 6;

P1.Print();P2.Print();P3.Print();

return 0;}

Page 14: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 13

5. 객체 과

객체 생 à 생 호출, 객체 à 호출

객체가 는 시점 (= 수 시점)

① 역 수 : 해당 함수 수행 료 고 환

② 전역 수 : 프 그램 종료

에 한 제 항

① 클래스 과 동 하다. 단, 생 해

에 ‘~’ 문 가 는다.

② 환형 환값 다.

③ 매개 수가 존 하 는다. 라 단 하나 만 존 할 수 다.

class CPoint {private :

int x, int y;

public :CPoint(int a, int b) { x = a; y = b; } // 생 자~CPoint() { cout << " 자" << endl; } // 자void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

Page 15: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 14

5. 객체 과

가 필 한 : 동적 생 하여 하는 경

class CArray {private :

int count;int *x;

public :CArray(int a) { count = a; x = new int[count]; } // 생 자void Delete() { delete [] x; } // 리 해제void Print() {

for (int i = 0; i < count; i++)cout << x[i] << endl;

}};

int main(void){

CArray ary(5);ary.Print();ary.Delete();

return 0;}

객체 생 시 new 해 열 생 하 므

가에 delete [] 수행해 함.

~CArray() { delete [] x; } // 자, 리 해제

다 과 같 추가한다

Delete 함수 Delete 함수 호출 필

Page 16: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 15

6. 생 호출 순

생 : 객체 생 순, : 객체 생 역순

class CPoint {private :

int x;int y;

public :CPoint(int a, int b) { x = a; y = b; cout << "생 자 : ";

Print();}~CPoint() { cout << " 자 : ";

Print(); } void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

CPoint P1(1, 1); // 전역 객체CPoint P2(2, 2); // 전역 객체

int main(void){

CPoint P3(3, 3); // 지역 객체CPoint P4(4, 4); // 지역 객체

return 0;}

함수 내에

수뿐만 니라 다 함수 호출 가능!

Page 17: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 16

7. 폴트 생 폴트

다 프 그램 수행시 보라.

class CPoint {private :

int x, y;

public :void SetXY(int a, int b) { x = a; y = b; }void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

int main(void){

CPoint P1;P1.SetXY(3, 4);P1.Print();

return 0;}

객체 생 à생 호출à생 는 에?

객체 à 호출à 는 에?

Page 18: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 17

7. 폴트 생 폴트

폴트 생 폴트

n 생 만들 경 폴트 생 가 동 함

Ø CPoint() { } // 매개 수 . 특 히 하는

n 만들 경 폴트 가 동 함

Ø ~CPoint() { } // 특 히 하는

n 생 1개 시적 추가하 폴트 생 는 라짐

n 시적 추가하 폴트 는 라짐

다 프 그램 문제점 ?

class CPoint {private :

int x;int y;

public :CPoint(int a, int b) { x = a; y = b; } // 생 자void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

int main(void){

CPoint P1(3, 4);CPoint P2;

P1.Print();P2.Print();

return 0;}

생 는 에?

Page 19: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 18

7. 폴트 생 폴트

다 드 미는?

n CPoint P1(); // CPoint 객체 P1 생 ? No!

Ø 것 매개 수가 고 CPoint 객체 환하는 P1 함수 프 타

미함

ØCPoint P1(void);

Ø비 : int func(void);

n 객체 생 시 매개 수가 경 에는 항 다 과 같

ØCPoint P1;

Page 20: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 19

8. 초 화

객체 생 시 수 초 화

n 생 내에 문 ( 존 )

n 초 화 문 : 수 생 과 동시에 초 화!

class CPoint {private :

int x;int y;

public :CPoint(int a, int b) : x(a), y(b) { } // 버 초 화 구문// CPoint(int a, int b) { x = a; y = b; }void Print() { cout << "(" << x << ", " << y << ")" << endl; }

};

int main(void){

CPoint P1(3, 4);P1.Print();

return 0;}

(비 )

int a; a = 5;

int a = 5;

생 시 초 화 할 것 가?

생 내에 문 할 것 가?

à차 점만 고 다 느 것 해 무

à단, 드시 초 화 해 하는

황 à 8.4절, 9.8절

수 초 화 순 는

생 에 술 순

Page 21: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 20

9. 함수 정

함수 정

n 내 정 : 클래스 내 에 함수 체

n 정 : 클래스 내 에 함수 프 타 만 , 함수 체는 클

래스 에

class CPoint {private :

int x, y;

public :CPoint(int a, int b);void Move(int a, int b);void Print();

};

CPoint::CPoint(int a, int b) : x(a), y(b) // 생 자의 부 정의{ }

void CPoint::Move(int a, int b) // 버 함수의 부 정의{

x = x + a;y = y + b;

}

void CPoint::Print() // 버 함수의 부 정의{

cout << "(" << x << ", " << y << ")" << endl;}

int main(void){

CPoint P1(3, 4);P1.Move(5, 6);P1.Print();

return 0;}

환형 클래스 ::함수 (…)

{

}

Page 22: 4장클래스와객체 - contents.kocw.or.krcontents.kocw.or.kr/document/CPP04_Class and Object.pdf · 2012. 6. 18. · 타입à변수, 클래스à객체 n 객체선언방법: 기본적으로는변수생성과동일

4 클래스 객체 21

10. 함수 라 함수

함수 내 정 현하는 경

n 동 라 함수 식 à 동 라

정 시 라 함수 하는

n 정 시 inline 키워드만 추가하

class CPoint {private :

int x;int y;

public :CPoint(int a, int b) : x(a), y(b) { }inline void Print();

};

inline void CPoint::Print() // 인라인 함수 언{

cout << "(" << x << ", " << y << ")" << endl;}