[c++ lab] 3. c++ 프로그래밍
TRANSCRIPT
![Page 1: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/1.jpg)
3. C++ 프로그래밍(L) C++ 프로그래밍
박민근
![Page 2: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/2.jpg)
솔류션과 프로젝트 생성
![Page 3: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/3.jpg)
객체지향 프로그래밍
![Page 4: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/4.jpg)
![Page 5: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/5.jpg)
객체
속성
행동
캐릭터머리모양 , 키 ,
피부색공격력 , 방어력
레벨아이템
달리기 , 서있기 , 앉기
공격하기 , 방어하기
맞기 , 죽기
![Page 6: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/6.jpg)
객체
속성
행동
객체
멤버 변수
멤버 함수( 메소드 )
![Page 7: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/7.jpg)
클래스객체 ( 인스턴스 )
건담 설계도( 생성된 ) 건담
![Page 8: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/8.jpg)
크기와 색상이 달라도 다 같은거…
![Page 9: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/9.jpg)
결국은 다 같은 계열…
![Page 10: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/10.jpg)
부모 클래스
자식 클래스
클래스의 상속 구조
![Page 11: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/11.jpg)
로보트
상속 관계(is a 관계 )
구체화일반화
![Page 12: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/12.jpg)
상속 관계
• 부모의 특성 ( 속성 , 행동 ) 을 그대로 상속 받아 , 같은 특성을 가질 수
있다 .
• 부모 클래스를 좀 더 구체화 시켜서 설계 한다는 개념
• 각 클래스끼리의 공통된 특성을 부모 클래스에 넣어서 각각의 파생
클래스에서 재사용이 가능하다
• 부모 = 기본 클래스 , 자식 = 파생 클래스
• 부모 <-> 자식 == 일반화 <-> 구체화
• 자식 클래스는 부모 클래스의 흉내를 낼 수 있다 . ( 다형성 )
![Page 13: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/13.jpg)
떄린건가 ? 맞은건가 ?
![Page 14: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/14.jpg)
객체는 내가 중심이다
다른 객체에 대해서는 신경쓰지 않아도 된다 .
![Page 15: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/15.jpg)
클래스 구조
![Page 16: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/16.jpg)
객체의 생성
![Page 17: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/17.jpg)
생성자와 소멸자
• 생성자 객체가 처음 생성 될 때 , 자동으로 호출 되는 함수
• 변수의 초기화 작업을 넣는다 .
• 최초 실행되어야 할 행동들을 넣는다
• 필요한 내부 객체들을 생성한다 .
• 소멸자 객체가 파괴될 때 , 자동으로 호출 되는 함수
• 할당된 메모리의 해제 작업
• 할당된 내부 객체들의 파괴 작업
• 기타 마지막에 실행되어야 할 행동들을 넣는다 .
![Page 18: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/18.jpg)
생성자와 소멸자 – 상속 관계
• 자식 클래스가 생성될때 부모의 생성자 함수는 자동 호출 된다 .
• 자식 클래스가 소멸될때 부모의 소멸자 함수도 자동 호출 된다 .
![Page 19: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/19.jpg)
멤버 변수와멤버 함수 (
메소드 )
![Page 20: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/20.jpg)
Ship 클래스 – 멤버 변수 , 멤버 함수
![Page 21: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/21.jpg)
접근 제한• 은닉성• 노출하지 않아도 되는
정보는 보여주거나 제공할 필요가 없다 .
• 외부에서 함부로 변경 못함
![Page 22: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/22.jpg)
접근 권한 설정하기 (2)
멤버의 접근 권한 설정하기
접근 권한 키워드에 대한 요약 (뒤에서 더욱 자세히 분류 )public : 외부에서의 접근을 허용한다 .protected, private : 외부에서 접근할 수 없다 .
[21-23]
![Page 23: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/23.jpg)
• 아무나 사용할 수 있다 . • 함수 – 객체를 사용하는 누구든 호출 가능• 변수 – 객체를 사용하는 누구든 값의 변경 및 사용 가능
Public – 모두에게 공개 한다
• 자신과 자식 클래스만 사용이 가능하다 . • 함수 – 나와 내 자식 클래스 내부에서만 호출 가능• 변수 – 나와 내 자식 자식 클래스 내부에서면 변경 및 사용 가능
Protected – 우리 집안것 ! 내 자식들만 사용 가능
• 자신만 사용이 가능하다• 함수 , 변수 전부 클래스 자기 자신만 사용 가능
Private – 이건 나만의 것 ! 내 자식도 못씀 ! 내거야 !!
클래스 내부 , 외부 , 자식 클래스 관계
![Page 24: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/24.jpg)
접근 권한 설정하기 (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++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/25.jpg)
enum 열거형
![Page 26: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/26.jpg)
enum 열거형• 타입 종류같은 열거 해야 하는 값들을 저장하는 데이터 타입• 내부적으로는 int 형과 같은 4 바이트 변수다 .• 변수안에 들어갈 값들을 제한하여 정한다고 생각하면 된다 . • 정의된 값들은 디폴트로 0 부터 순차적으로 증가한다 .• 0 이 아닌 다른 특정한 값 (int 형 ) 으로 정의할 수도 있다 .
예 ) 히트 결과 • 함수 반환 값으로 구별이 필요
• Int 형으로 반환 => 0 – 미스 , 1 – 히트 , 2 – 파괴
• enum 형으로 선언
• MISS, HIT, DESTROY
• 반환값으로 enum 형을 반환
![Page 27: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/27.jpg)
![Page 28: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/28.jpg)
구조체
• 여러가지 다른 타입의 데이터의 묶음• 관련된 다양한 데이터를 하나의 묶음 데이터로 처리할 수 있다 .• 예 ) 배의 위치 : x 좌표 , y 좌표
![Page 29: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/29.jpg)
C++문자열
![Page 30: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/30.jpg)
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++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/31.jpg)
std::string
• 가변 문자열 템플릿 클래스
• 문자열의 길이에 상관 없이 문자열을 담을 수 있다 .
• 내부적으로는 문자의 가변 배열로 구성 되어 있다 .
• C 형태의 문자열 ( 문자배열 char[]) 로 변환이
필요한 경우에는 c_str() 멤버 함수를 사용 한다 .
![Page 32: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/32.jpg)
sprintf_s()
• sprintf_s( 결과를 담을 문자 배열 , 포맷 , argu-
ment,..)
• printf 에서 출력 결과를 , 입력 받은 배열에
담는다고 생각하면 된다 .
• 문자열의 변경이나 복사 , 추가등에 활용할 수
있다 .
• 임의의 문자열 조합등을 문자열 배열에 담는다고
할 수 있다 .
![Page 33: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/33.jpg)
문자열 변경
문자열 복사
![Page 34: [C++ lab] 3. c++ 프로그래밍](https://reader033.vdocuments.pub/reader033/viewer/2022061618/55851523d8b42aff298b4dc6/html5/thumbnails/34.jpg)
문자열 추가