회원 로그인
|
클래스 선언/정의, 객체 생성
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개(7/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
165 | [C#] 네임스페이스 (namespace) | 푸딩뱃살 | 3405 | 2015.11.14 17:34 |
164 | [C#] 인터페이스 (Interface) | 푸딩뱃살 | 2196 | 2015.11.13 18:17 |
163 | [C/C++] Static(정적) 멤버 변수, 메소드 | 푸딩뱃살 | 2474 | 2015.11.13 10:32 |
162 | [C/C++] 추상 클래스 - 오버라이드 / 업/다운캐스팅(형변환) / virtual(가상함수) | 푸딩뱃살 | 4726 | 2015.11.12 02:00 |
161 | [C/C++] 메소드 오버라이드 | 푸딩뱃살 | 1993 | 2015.11.12 01:51 |
160 | [C#] 상속 (with Unity) | 푸딩뱃살 | 5454 | 2015.11.10 16:25 |
159 | [C/C++] 클래스 상속 | 푸딩뱃살 | 2246 | 2015.11.10 14:08 |
158 | [C/C++] 객체 활용 | 푸딩뱃살 | 2471 | 2015.11.09 21:28 |
157 | [C#] C# 객체 클래스 | 푸딩뱃살 | 3568 | 2015.11.08 15:51 |
156 | [C/C++] 생성자 / 소멸자 / 오버로드 | 푸딩뱃살 | 2202 | 2015.11.07 01:23 |
>> | [C/C++] 클래스 선언/정의, 객체 생성 | 푸딩뱃살 | 3568 | 2015.11.06 14:05 |
154 | [C/C++] 로또 프로그램 | 푸딩뱃살 | 2285 | 2015.11.06 12:00 |
153 | [C/C++] 2차원 동적 객체 배열 활용 | 푸딩뱃살 | 3650 | 2015.11.06 00:47 |
152 | [C/C++] 2차원 배열 | 푸딩뱃살 | 2403 | 2015.11.06 00:30 |
151 | [C/C++] 2차원 포인터 | 푸딩뱃살 | 2052 | 2015.11.06 00:26 |
150 | [C/C++] 동적할당 | 푸딩뱃살 | 1805 | 2015.11.05 11:23 |
149 | [C/C++] 당신의 프로그래밍에 디버깅 더하기 : Visual C++ 디버깅 기초에서 고급까지 | 푸딩뱃살 | 1452 | 2015.11.05 11:20 |
148 | [C/C++] 포인터와 배열의 이해 | 푸딩뱃살 | 2013 | 2015.11.04 23:54 |
147 | [C/C++] 포인터 | 푸딩뱃살 | 2192 | 2015.11.04 15:14 |
146 | [C/C++] 일반 함수와 메소드간의 차이 | 푸딩뱃살 | 2431 | 2015.11.03 23:38 |