러닝센터 7강
객체지향 - 중복과 확장 재사용의 용이성.
클래스 -> 커스텀 자료형.
매개변수와 맴버변수의 이름이 같은것이 아니라면 this를 안써도 된다.
========[ 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와 같은 이미지 요소를
메모리 상으로 올렸을때
댓글
댓글 쓰기