회원 로그인
|
클래스 선언/정의, 객체 생성
C++ 클래스 선언/정의, 객체 생성
[객체 지향 프로그래밍(Object Oriented Programing)]
1. 프로그램의 모든 것들을 객체(Object)로 표현하는 프로그래밍 패러다임
2. 객체란? 세상 또는 게임의 모든 요소들 (플레이어, 몬스터, 아이템, 무기, 방어구, 총알 ....)
[객체 지향의 프로그래밍 특징]
1. 추상화 : 실제 객체에서 주요한 특징을 뽑아 프로그래밍적인 코드로 표현해야 한다.
자동차 -> 핸들, 바퀴, 프레임, 운전하다(), 달린다(), 정지한다() ....
2. 캡슐화 : 객체의 요소들 중 꼭 필요한 것들만 외부에서 접근 가능하도록 해야 한다.
자동차의 엔진은 외부에서 감춰져 있음
3. 상속성 : 공통된 기능을 가진 객체들의 공통적 요소를 뽑아 독립된 하나의 객체를 만들고 재사용하도록 한다.
차 -> 바퀴, 핸들, 운전하다, 달린다() <= 오토바이, 자전거, 자동차의 공통요소
4. 다형성 : 객체는 수행하는 기능에 따라 여러개의 객체 형태를 가질 수 있게 한다.
홍길동 -> 예비군, 아빠, 프로그래머, 길드장
[클래스]
- 객체를 만들기 위한 코드 설계도 (자동차 객체를 만들기 위해 자동차 설계도와 틀을 만듬)
- 커스텀 자료형? 클래스는 여러가지 자료형들을 가진 변수들의 조합을 가지고 만든 또다른 자료형임
- 객체를 표현하는 값을 속성, 객체의 동작 및 기능들을 메소드라 함
[클래스 문법]
1. 클래스 선언
class 클래스명 {
접근 지정자:
자료형 멤버 변수;
접근 지정자:
자료형 멤버 함수();
}
2. 클래스 정의
자료형 클래스명::멤버함수() {
...
...
}
3. 객체 생성
- 클래스타입 객체명;
- 클래스타입* 객체인스턴스명 = new 클래스타입();
3. 접근 지정자
- private : 클래스 내에서만 사용이 가능한 멤버 변수, 멤버 함수
- public : 클래스 외부에서도 사용이 가능함 멤버 변수, 멤버 함수
4. 메소드 오버로딩
- 다형성의 한 형태로 두개 이상의 메소드가 같은 목적을 가질경우 메소드 이름은 같고 매개변수 구성은 다르게 사용할 수 있는 것을 말한다.
[객체 지향 프로그래밍(Object Oriented Programing)]
1. 프로그램의 모든 것들을 객체(Object)로 표현하는 프로그래밍 패러다임
2. 객체란? 세상 또는 게임의 모든 요소들 (플레이어, 몬스터, 아이템, 무기, 방어구, 총알 ....)
[객체 지향의 프로그래밍 특징]
1. 추상화 : 실제 객체에서 주요한 특징을 뽑아 프로그래밍적인 코드로 표현해야 한다.
자동차 -> 핸들, 바퀴, 프레임, 운전하다(), 달린다(), 정지한다() ....
2. 캡슐화 : 객체의 요소들 중 꼭 필요한 것들만 외부에서 접근 가능하도록 해야 한다.
자동차의 엔진은 외부에서 감춰져 있음
3. 상속성 : 공통된 기능을 가진 객체들의 공통적 요소를 뽑아 독립된 하나의 객체를 만들고 재사용하도록 한다.
차 -> 바퀴, 핸들, 운전하다, 달린다() <= 오토바이, 자전거, 자동차의 공통요소
4. 다형성 : 객체는 수행하는 기능에 따라 여러개의 객체 형태를 가질 수 있게 한다.
홍길동 -> 예비군, 아빠, 프로그래머, 길드장
[클래스]
- 객체를 만들기 위한 코드 설계도 (자동차 객체를 만들기 위해 자동차 설계도와 틀을 만듬)
- 커스텀 자료형? 클래스는 여러가지 자료형들을 가진 변수들의 조합을 가지고 만든 또다른 자료형임
- 객체를 표현하는 값을 속성, 객체의 동작 및 기능들을 메소드라 함
[클래스 문법]
1. 클래스 선언
class 클래스명 {
접근 지정자:
자료형 멤버 변수;
접근 지정자:
자료형 멤버 함수();
}
2. 클래스 정의
자료형 클래스명::멤버함수() {
...
...
}
3. 객체 생성
- 클래스타입 객체명;
- 클래스타입* 객체인스턴스명 = new 클래스타입();
3. 접근 지정자
- private : 클래스 내에서만 사용이 가능한 멤버 변수, 멤버 함수
- public : 클래스 외부에서도 사용이 가능함 멤버 변수, 멤버 함수
4. 메소드 오버로딩
- 다형성의 한 형태로 두개 이상의 메소드가 같은 목적을 가질경우 메소드 이름은 같고 매개변수 구성은 다르게 사용할 수 있는 것을 말한다.
#include <iostream> #include <stdlib.h> #include <time.h> #include <string> using namespace std; // C++ : getter, setter class Player2{ private: // 비공개 메소드들, 객체를 참조할 때나 외부에서 함부로 접근 못하게 string _name; // 이름 속성 int _hp; // 체력 속성 int _damage; // 데미지 속성 void Die(); // 사망 속성 public: // 공개 메소드들, 전부 접근 가능 void Init(string name); void Hit(int damage); // 메소드 오버로드 : 메소드명이 같지만 리턴값이나 매개변수가 다르게 사용할 수 있다. void Shot(); void Shot(int bonusDamage); }; // 플레이어 초기화 메소드 void Player2::Init(string name){ _name = name; cout << "플레이어의 이름은 [" << _name.c_str() << "] 입니다" << endl; _hp = 100; // _damage = 20; // } // Player:: // 플레이어 타격 메소드 void Player2::Hit(int damage){ _hp -= damage; cout << "[" << _name.c_str() << "] 플레이어가 " << damage << "의 피해를 입었습니다." << endl; // 사망 if (_hp <= 0) Die(); } // 플레이어 총알 발사 메소드 void Player2::Shot(){ cout << "[" << _name.c_str() << "] 플레이어가 " << _damage << " 데미지의 총알을 발사합니다." << endl; } // 플레이어 총알 발사 메소드 (오버로딩) void Player2::Shot(int bounusDamage){ cout << "[" << _name.c_str() << "] 플레이어가 " << _damage << "데미지의 총알을 발사합니다. [추가 데미지 : " \ << bounusDamage << "]" << endl; } // 플레이어 사망 메소드, Die()이 Player(클래스) 소속되어 있다. void Player2::Die(){ cout << "[" << _name.c_str() << "] 플레이어가 사망하였습니다." << endl; } class GameManager { public: GameManager() { Start(); } void Start(){ // 플레이어 객체 생성 Player2* player = new Player2(); // 플레이어 객체 초기화 player->Init("푸딩"); // 플레이어 총알 2번 발사 player->Shot(); player->Shot(); // 플레이어가 공격 받음 player->Hit(10); // 총알 발사 : 메소드 오버로딩 player->Shot(3); player->Hit(5); /* Player player1; player1._name = "홍길동"; player1._hp = 100; player1._damage = 20; Player player2; player2._name = "홍길동"; player2._hp = 100; player2._damage = 20; .... 이렇게 속성이 같은 타입을 반복해서 모든 플레이어를 초기화 해야하는 것을 클래스로 사용, 객체를 생성해서 사용하면 간단히 위 코드처럼 Init()에 입력으로 초기화 사용할 수 있다. (클래스의 중요성) */ } }; void main2(){ GameManager* object = new GameManager(); delete object; }
댓글 0개
| 엮인글 0개
285개(1/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
285 | [Python] 동적 import - 모듈을 변수로 받아오기 | 푸딩뱃살 | 412 | 2022.10.27 10:45 |
284 | [Python] 파이썬 3.7.7과 3.9.7의 os.path.expanduser() 차이 | 푸딩뱃살 | 455 | 2022.08.18 12:22 |
283 | [Python] error: Microsoft Visual C++ 9.0 is required. | 푸딩뱃살 | 684 | 2022.08.03 13:35 |
282 | [Python] pyscript | 푸딩뱃살 | 453 | 2022.06.09 11:21 |
281 | [Python] float is / float not is | 푸딩뱃살 | 593 | 2022.03.02 15:03 |
280 | [Python] 이터널 문자열 f | 푸딩뱃살 | 833 | 2022.01.27 16:35 |
279 | [Python] is와 ==의 차이 | 푸딩뱃살 | 485 | 2021.11.25 15:54 |
278 |
[Python] Error: ImportError: file |
푸딩뱃살 | 916 | 2021.11.16 11:24 |
277 | [Python] 파이썬 디컴파일 - uncompyle6 | 푸딩뱃살 | 774 | 2021.11.10 14:46 |
276 | [Python] 파이썬 확장자 설명 | 푸딩뱃살 | 550 | 2021.11.03 14:38 |
275 | [참고] 웹 fbx 뷰어 | 푸딩뱃살 | 470 | 2021.10.19 15:46 |
274 | [Python] enumerate() | 푸딩뱃살 | 500 | 2021.10.13 14:44 |
273 | [Python] 아나콘다에서 가상 환경 | 푸딩뱃살 | 720 | 2020.11.21 00:26 |
272 | [Python] pip로 설치 때 퍼미션 에러 | 푸딩뱃살 | 1265 | 2020.06.06 17:13 |
271 | [Python] OpenCV 10-3. 이미지 Thresholding - Otsu's Binarizatio | 푸딩뱃살 | 673 | 2020.06.05 14:01 |
270 | [Python] OpenCV 10-2. 이미지 Thresholding - Adaptive Threshold | 푸딩뱃살 | 694 | 2020.06.05 13:58 |
269 | [Python] OpenCV 10-1. 이미지 Thresholding | 푸딩뱃살 | 578 | 2020.06.05 13:56 |
268 | [Python] OpenCV 9-2. 색 추적 | 푸딩뱃살 | 772 | 2020.06.02 23:29 |
267 | [Python] OpenCV 9-1. 색공간 바꾸기 | 푸딩뱃살 | 639 | 2020.06.02 23:27 |
266 | [Python] OpenCV 8-3. 이미지 비트 연산 | 푸딩뱃살 | 528 | 2020.06.02 23:21 |