34
3. C++ 프프프프프 (L) C++ 프프프프프 프프프

[C++ lab] 3. c++ 프로그래밍

Embed Size (px)

Citation preview

Page 1: [C++ lab] 3. c++ 프로그래밍

3. C++ 프로그래밍(L) C++ 프로그래밍

박민근

Page 2: [C++ lab] 3. c++ 프로그래밍

솔류션과 프로젝트 생성

Page 3: [C++ lab] 3. c++ 프로그래밍

객체지향 프로그래밍

Page 4: [C++ lab] 3. c++ 프로그래밍
Page 5: [C++ lab] 3. c++ 프로그래밍

객체

속성

행동

캐릭터머리모양 , 키 ,

피부색공격력 , 방어력

레벨아이템

달리기 , 서있기 , 앉기

공격하기 , 방어하기

맞기 , 죽기

Page 6: [C++ lab] 3. c++ 프로그래밍

객체

속성

행동

객체

멤버 변수

멤버 함수( 메소드 )

Page 7: [C++ lab] 3. c++ 프로그래밍

클래스객체 ( 인스턴스 )

건담 설계도( 생성된 ) 건담

Page 8: [C++ lab] 3. c++ 프로그래밍

크기와 색상이 달라도 다 같은거…

Page 9: [C++ lab] 3. c++ 프로그래밍

결국은 다 같은 계열…

Page 10: [C++ lab] 3. c++ 프로그래밍

부모 클래스

자식 클래스

클래스의 상속 구조

Page 11: [C++ lab] 3. c++ 프로그래밍

로보트

상속 관계(is a 관계 )

구체화일반화

Page 12: [C++ lab] 3. c++ 프로그래밍

상속 관계

• 부모의 특성 ( 속성 , 행동 ) 을 그대로 상속 받아 , 같은 특성을 가질 수

있다 .

• 부모 클래스를 좀 더 구체화 시켜서 설계 한다는 개념

• 각 클래스끼리의 공통된 특성을 부모 클래스에 넣어서 각각의 파생

클래스에서 재사용이 가능하다

• 부모 = 기본 클래스 , 자식 = 파생 클래스

• 부모 <-> 자식 == 일반화 <-> 구체화

• 자식 클래스는 부모 클래스의 흉내를 낼 수 있다 . ( 다형성 )

Page 13: [C++ lab] 3. c++ 프로그래밍

떄린건가 ? 맞은건가 ?

Page 14: [C++ lab] 3. c++ 프로그래밍

객체는 내가 중심이다

다른 객체에 대해서는 신경쓰지 않아도 된다 .

Page 15: [C++ lab] 3. c++ 프로그래밍

클래스 구조

Page 16: [C++ lab] 3. c++ 프로그래밍

객체의 생성

Page 17: [C++ lab] 3. c++ 프로그래밍

생성자와 소멸자

• 생성자 객체가 처음 생성 될 때 , 자동으로 호출 되는 함수

• 변수의 초기화 작업을 넣는다 .

• 최초 실행되어야 할 행동들을 넣는다

• 필요한 내부 객체들을 생성한다 .

• 소멸자 객체가 파괴될 때 , 자동으로 호출 되는 함수

• 할당된 메모리의 해제 작업

• 할당된 내부 객체들의 파괴 작업

• 기타 마지막에 실행되어야 할 행동들을 넣는다 .

Page 18: [C++ lab] 3. c++ 프로그래밍

생성자와 소멸자 – 상속 관계

• 자식 클래스가 생성될때 부모의 생성자 함수는 자동 호출 된다 .

• 자식 클래스가 소멸될때 부모의 소멸자 함수도 자동 호출 된다 .

Page 19: [C++ lab] 3. c++ 프로그래밍

멤버 변수와멤버 함수 (

메소드 )

Page 20: [C++ lab] 3. c++ 프로그래밍

Ship 클래스 – 멤버 변수 , 멤버 함수

Page 21: [C++ lab] 3. c++ 프로그래밍

접근 제한• 은닉성• 노출하지 않아도 되는

정보는 보여주거나 제공할 필요가 없다 .

• 외부에서 함부로 변경 못함

Page 22: [C++ lab] 3. c++ 프로그래밍

접근 권한 설정하기 (2)

멤버의 접근 권한 설정하기

접근 권한 키워드에 대한 요약 (뒤에서 더욱 자세히 분류 )public : 외부에서의 접근을 허용한다 .protected, private : 외부에서 접근할 수 없다 .

[21-23]

Page 23: [C++ lab] 3. c++ 프로그래밍

• 아무나 사용할 수 있다 . • 함수 – 객체를 사용하는 누구든 호출 가능• 변수 – 객체를 사용하는 누구든 값의 변경 및 사용 가능

Public – 모두에게 공개 한다

• 자신과 자식 클래스만 사용이 가능하다 . • 함수 – 나와 내 자식 클래스 내부에서만 호출 가능• 변수 – 나와 내 자식 자식 클래스 내부에서면 변경 및 사용 가능

Protected – 우리 집안것 ! 내 자식들만 사용 가능

• 자신만 사용이 가능하다• 함수 , 변수 전부 클래스 자기 자신만 사용 가능

Private – 이건 나만의 것 ! 내 자식도 못씀 ! 내거야 !!

클래스 내부 , 외부 , 자식 클래스 관계

Page 24: [C++ lab] 3. c++ 프로그래밍

접근 권한 설정하기 (1)

멤버의 접근 권한을 설정하는 예class AccessControl{public:

char publicData;void publicFunc() {};

protected:int protectedData;void protectedFunc() {};

private:float privateData;void privateFunc() {};

};

int main(){

// 객체를 생성하고 , 각 멤버에 접근해보자AccessControl ac;

ac.publicData = 'A'; // 성공ac.publicFunc(); // 성공ac.protectedData = 100; // 실패ac.protectedFunc(); // 실패ac.privateData = 4.5f; // 실패ac.privateFunc(); // 실패

return 0;}

Page 25: [C++ lab] 3. c++ 프로그래밍

enum 열거형

Page 26: [C++ lab] 3. c++ 프로그래밍

enum 열거형• 타입 종류같은 열거 해야 하는 값들을 저장하는 데이터 타입• 내부적으로는 int 형과 같은 4 바이트 변수다 .• 변수안에 들어갈 값들을 제한하여 정한다고 생각하면 된다 . • 정의된 값들은 디폴트로 0 부터 순차적으로 증가한다 .• 0 이 아닌 다른 특정한 값 (int 형 ) 으로 정의할 수도 있다 .

예 ) 히트 결과 • 함수 반환 값으로 구별이 필요

• Int 형으로 반환 => 0 – 미스 , 1 – 히트 , 2 – 파괴

• enum 형으로 선언

• MISS, HIT, DESTROY

• 반환값으로 enum 형을 반환

Page 27: [C++ lab] 3. c++ 프로그래밍
Page 28: [C++ lab] 3. c++ 프로그래밍

구조체

• 여러가지 다른 타입의 데이터의 묶음• 관련된 다양한 데이터를 하나의 묶음 데이터로 처리할 수 있다 .• 예 ) 배의 위치 : x 좌표 , y 좌표

Page 29: [C++ lab] 3. c++ 프로그래밍

C++문자열

Page 30: [C++ lab] 3. c++ 프로그래밍

C 문자열 (char[])

I L o v e Y o u ~ P r o f \0

문자 (char) 의 배열

길이가 17 개인 고정 문자 배열 Char[17]

szTest 의 값 = 배열 시작 위치 ( 포인터 )

Page 31: [C++ lab] 3. c++ 프로그래밍

std::string

• 가변 문자열 템플릿 클래스

• 문자열의 길이에 상관 없이 문자열을 담을 수 있다 .

• 내부적으로는 문자의 가변 배열로 구성 되어 있다 .

• C 형태의 문자열 ( 문자배열 char[]) 로 변환이

필요한 경우에는 c_str() 멤버 함수를 사용 한다 .

Page 32: [C++ lab] 3. c++ 프로그래밍

sprintf_s()

• sprintf_s( 결과를 담을 문자 배열 , 포맷 , argu-

ment,..)

• printf 에서 출력 결과를 , 입력 받은 배열에

담는다고 생각하면 된다 .

• 문자열의 변경이나 복사 , 추가등에 활용할 수

있다 .

• 임의의 문자열 조합등을 문자열 배열에 담는다고

할 수 있다 .

Page 33: [C++ lab] 3. c++ 프로그래밍

문자열 변경

문자열 복사

Page 34: [C++ lab] 3. c++ 프로그래밍

문자열 추가