러닝센터 7강 - 클래스

러닝센터 7강

객체지향 - 중복과 확장 재사용의 용이성.
클래스 -> 커스텀 자료형.
매개변수와 맴버변수의 이름이 같은것이 아니라면 this를 안써도 된다.
[클래스]
- 객체를 만들기 위한 코드 설계도 (자동차 객체를 만들기 위해 자동차 설계도와 틀을 만듬)
- 커스텀 자료형? 클래스는 여러가지 자료형들을 가진 변수들의 조합을 가지고 만든 또다른 자료형임
- 객체를 표현하는 값을 속성, 객체의 동작 및 기능들을 메소드라 함
  
[클래스 문법]
  
1. 클래스 선언
  
class 클래스명 {
  접근 지정자:
      자료형 멤버 변수;
  접근 지정자:
      자료형 멤버 함수();
}
  
2. 클래스 정의
  
자료형 클래스명::멤버함수() {
      ...
      ...
}
  
3. 객체 생성
  
- 클래스타입 객체명;
- 클래스타입* 객체인스턴스명 = new 클래스타입();
  
3. 접근 지정자
  
  - private : 클래스 내에서만 사용이 가능한 멤버 변수, 멤버 함수
  - public : 클래스 외부에서도 사용이 가능함 멤버 변수, 멤버 함수
  
4. 메소드 오버로딩
  
- 다형성의 한 형태로 두개 이상의 메소드가 같은 목적을 가질경우
메소드 이름은 같고 매개변수 구성은 다르게 사용할 수 있는 것을 말한다.
========[ private / public / GET SET ]===========================================================
#include <iostream>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <Windows.h>

using namespace std;


// 클래스 키워드 클래스 명
// 플레이어 클래스
class Player{

private: // 접근 지정자 : 외부에서 접근할 수 없음.
 string name;
 int hp;

 // 객체 스스로 호출해야 하는 메소드의 경우 private에 지정함.
 // 외부에서 잘못된 호출을 막음.( main 함수등 )

 void Die(){
  cout << " 플레이어가 사망 했습니다." << endl;
 }

public: // 접근 지정자 : 외부에서 접근할 수 있음.


 // 플레이어가 타격을 입을때
 void Hit(){
  hp -= 50;

  cout << "플레이어가 타격을 입었습니다." << endl;
  if (hp <= 0) Die();// 자신(객체)에서 호출하는 메소드는 제약이 없기때문에 private 이라도 호출이 가능하다. 외부 접근 불가.
 }
 
  
 //private 으로 되어 있는 특징(속성)을 설정 하도록 만든 메소드 : 세터
 void SetName(string name){
  this->name = name;
 }
 //private 으로 되어 있는 특징(속성)을 리턴 하도록 만든 메소드 : 게터
 string GetName(){
  return this->name;
 }
 // HP 세터
 void SetHp(int hp){
  // 세터나 메소드를 통해서 데이터값을 변경할때 객체 설계자는
  // 객체의 방어나 우선 처리 방식의 코드를 통해 데이타를 보호 할 수 있다.
  if (hp < 0) hp = 100;
  this->hp = hp;
 }
 // HP 게터
 int GetHp(){
  return this->hp;
 }

};

void main(){
 // public: 을 선언한 맴버 번수만 보인다.
 //정적 객체 생성 -> 클래스 객체변수명
 Player player; // [클새스명] [객체변수명]

 player.SetName("홍길동");
 player.SetHp(100);
 
 cout << "플레이어의 이름 : " << player.GetName() << endl;
 cout << "플레이어의 체력 : " << player.GetHp() << endl;

 //동적 객체 생성 -> 클래스명* 객체포인터변수명 = new 클래스명();
 
 Player* pPlayer = new Player;
 pPlayer->SetName("춘향이");
 pPlayer->SetHp(100);

 cout << "플레이어의 이름 : " << pPlayer->GetName() << endl;
 cout << "플레이어의 체력 : " << pPlayer->GetHp() << endl;


 pPlayer->Hit();
 pPlayer->Hit();
 delete pPlayer;
}

kr_tiger 선생님 인스타그램

====[ 생성자와 소멸자 ]===========================================================================
#include <iostream>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <Windows.h>

using namespace std;

class ItemInfo{
private:
 string _name;
 int _damage;
 int _price;

public:
 // 생성자 함수 호출 결합. 초기화. 
 // 생성자는 반드시 클래스명과 이름을 같이 한다.
 // 반환하는 값을 가지지 않는다.
 // 객체를 생성할때 자동으로 호출 한다.
 // 초기화 : 맴버변수에 대한 초기 값 설정
 ItemInfo(string name, int damage, int price)
 {
  SetItemInfo(name, damage, price);
 }


 void SetItemInfo(string name, int damage, int price)
 {
  _name = name;
  _damage = damage;
  _price = price;
 }
 void ShowItemStat(){
  cout << " 아이템 이름 : " << _name << endl;
  cout << " 아이템 데미지 : " << _damage << endl;
  cout << " 아이템 가격 : " << _price << endl;
 }
};

void main()
{
 //생성자는 객체를 생성함과 동시에 메소드를 호출하여 설정
 //생성자를 만드는 이유는 객체를 생성함과 동시에 데이터값을 가질 수 있다.
 ItemInfo* iteminfo = new ItemInfo("불타는검", 2000, 10000);
 //iteminfo->SetItemInfo("불타는검", 2000, 10000);

 iteminfo->SetItemInfo("불타는 검", 400, 2000);
 iteminfo->ShowItemStat();
 delete iteminfo;
}

==========================================================================================
#include <iostream>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <Windows.h>

using namespace std;

class ItemInfo{
private:
 string _name;
 int _damage;
 int _price;

public:
 // 기본생성자 : 매개변수가 없는 생성자로 
 // 매개 없이 생성할 경우 기본적으로 호출됨


 // 생성자 함수 호출 결합. 초기화. 
 // 생성자는 반드시 클래스명과 이름을 같이 한다.
 // 반환하는 값을 가지지 않는다.
 // 객체를 생성할때 자동으로 호출 한다.
 // 초기화 : 맴버변수에 대한 초기 값 설정
 ItemInfo(string name, int damage, int price)
 {
  SetItemInfo(name, damage, price);
 }


 void SetItemInfo(string name, int damage, int price)
 {
  _name = name;
  _damage = damage;
  _price = price;
 }
 void ShowItemStat(){
  cout << " 아이템 이름 : " << _name << endl;
  cout << " 아이템 데미지 : " << _damage << endl;
  cout << " 아이템 가격 : " << _price << endl;
 }
};

void main()
{
 //생성자는 객체를 생성함과 동시에 메소드를 호출하여 설정
 //생성자를 만드는 이유는 객체를 생성함과 동시에 데이터값을 가질 수 있다.
 ItemInfo* iteminfo = new ItemInfo("불타는검", 2000, 10000);// 객체 포인트 변수
 //iteminfo->SetItemInfo("불타는검", 2000, 10000);

 iteminfo->SetItemInfo("불타는 검", 400, 2000);
 iteminfo->ShowItemStat();
 delete iteminfo;

 ItemInfo* iteminfo = new ItemInfo;
}



==================================================================================================
오버로딩
같은 이름의 함수가 있을때 호출시 매개변수에 따라 호출 할 수 있다.

매개 변수가 있으면 있는 메소드 실행
없으면 없는 메소드를 실행 

---------------------------------------------------------------


2d 2d texturetype sprite => png와 같은 이미지 요소를 
메모리 상으로 올렸을때 

댓글

이 블로그의 인기 게시물

날짜 시간 시간차 시간 계산 하기

코루틴에서 CallBack 함수 적용하기

C++ 언어 퍼센트 구하는 방법 / 기본 언어 퍼센트 구하는 방법