πŸ€“ Study/C++ & C#

02. μ—°μ‚°μž / ν•¨μˆ˜ / 클래슀

GAMEMING 2024. 3. 13. 04:02
728x90

 

 

< μ—°μ‚°μž >

#include <iostream>
using namespace std;

// λ©”λͺ¨λ¦¬ μ˜μ—­
// STACK - HEAP - DATA - CODE

// 01. μ—°μ‚°μž 

// 데이터 μ—°μ‚° 및 가곡 κ°€λŠ₯

// 1) μ‚°μˆ  μ—°μ‚°μž
// 2) λŒ€μž… μ—°μ‚°μž
// 3) 증감 μ—°μ‚°μž
// 4) 비ꡐ μ—°μ‚°μž
// 5) 논리 μ—°μ‚°μž
// 6) λΉ„νŠΈ μ—°μ‚°μž
// 7) μ‚Όν•­ μ—°μ‚°μž

int a = 1;
int b = 7;

bool isSame;
bool isDiff;
bool isGreater;
bool isSmaller;
bool test;

int hp = 100;
bool isInvincible = true;

unsigned char flag;

const int Air = 0;
const int Stun = 1;
const int PolyMorph = 2;
const int Invincible = 3;

int main()
{
	// 01) μ‚°μˆ  μ—°μ‚°μž
	// 사칙 μ—°μ‚°
	// 데미지 계산, 체λ ₯ 깎기, 루프문 λ“± λ‹€μ–‘ν•œ κ³³μ—μ„œ μ‚¬μš©

	a = a + 3;  // add  (μ—°μ‚°μžκ°€ 같은 의미)a += 3
	cout << a << endl;
	a = b - 3; // sub						a -= 3
	cout << a << endl;
	a = b * 3; // mul						a *= 3
	cout << a << endl;
	a = b / 3; // λ‚˜λˆ—μ…ˆ div				a /= 3
	cout << a << endl;
	a = b % 3; // λ‚˜λ¨Έμ§€ dic				a %= 3
	cout << a << endl;


	// 02) λŒ€μž… μ—°μ‚°μž
	// = : μˆ˜ν•™μ—μ„œλŠ” κ°™λ‹€μ˜ μ˜λ―Έμ§€λ§Œ, 코딩에선 λŒ€μž…
	a = b;  // aλ₯Ό b에 λŒ€μž…ν•˜κ³  b λ°˜ν™˜
	cout << a << " " << b << endl;

	// +=  -=  *=  /=  %=


	// 03) 증감 μ—°μ‚°μž
	// 1μ”© 증가 ν˜Ήμ€ κ°μ†Œμ‹œν‚¬ λ•Œ μ‚¬μš©

	// 7  7
	b = a++;
	cout << a << " " << b << endl;   // 8  7
	b = ++a; 
	cout << a << " " << b << endl;   // 9  9
	b = a--;
	cout << a << " " << b << endl;   // 8  9
	b = --a;
	cout << a << " " << b << endl;   // 7  7


	// 04) 비ꡐ μ—°μ‚°μž
	// 두 ν•­ μ‚¬μ΄μ˜ 크기λ₯Ό λΉ„κ΅ν•˜λŠ” μ—°μ‚°μž
	// ex) 체λ ₯이 0되면 사망, 체λ ₯이 30%μ΄ν•˜λ©΄ 무적 λ°œλ™ λ“±
	// 즉 νŠΉμ • 쑰건이 되면 μ–΄λ– ν•œ event

	// a == b : a와 bκ°€ 같은가?
	// κ°™μœΌλ©΄ 1, λ‹€λ₯΄λ©΄ 0
	isSame = (a == b);
	cout << isSame << endl;

	// a != b : a와 bκ°€ λ‹€λ₯Έκ°€?
	// λ‹€λ₯΄λ©΄ 1, κ°™μœΌλ©΄ 0
	isDiff = (a != b);
	cout << isDiff << endl;

	// a > b . a >= b
	isGreater = (a > b);
	cout << isGreater << endl;

	// a < b . a <= b
	isSmaller = (a < b);
	cout << isSmaller << endl;


	// 05) 논리 μ—°μ‚°μž
	// μ–Έμ œ ν•„μš”ν•œκ°€? 쑰건에 λŒ€ν•œ 논리적 사고가 ν•„μš”
	// ex) λ‘œκ·ΈμΈν•  λ•Œ 아이디도 κ°™κ³  + λΉ„λ²ˆλ„ κ°™μ•„μ•Ό ν•œλ‹€ (λ™μ‹œμ— λ§Œμ‘±ν•΄μ•Ό 함)
	// ex) κΈΈλ“œ λ§ˆμŠ€ν„°μ΄κ±°λ‚˜ 운영자 계정이면 κΈΈλ“œ ν•΄μ‚°κ°€λŠ₯ (OR)

	// ! not
	test = !isSame; // isSame 값을 λ°˜λŒ€λ‘œ, isDiff와 같은 의미
	cout << test << endl;

	// && and
	// a && b -> λ‘˜λ‹€ 1이면 1, κ·Έμ™Έ 0 (두 쑰건 λ§Œμ‘±ν•΄μ•Όν•¨)
	test = (hp <= 0 && isInvincible == false);; //죽음
	cout << test << endl;

	// || or
	// a || b -> λ‘˜ 쀑 ν•˜λ‚˜λΌλ„ 1이면 1 (λ‘˜λ‹€ 0이면 0)
	test = (hp > 0 || isInvincible == true); //생쑴
	cout << test << endl;


	// 06) λΉ„νŠΈ μ—°μ‚°μž
	// μ–Έμ œ ν•„μš”ν•œκ°€?
	// ex) λΉ„νŠΈ λ‹¨μœ„μ˜ μ‘°μž‘μ΄ ν•„μš”ν•  λ•Œ 
	// λŒ€ν‘œμ μœΌλ‘œ BitFlag

	// ~ bitwise not
	// 단일 숫자의 λͺ¨λ“  λΉ„νŠΈλ₯Ό λŒ€μƒμœΌλ‘œ 0을 1둜, 1을 0으둜 λ°”κΏˆ

	// & bitwise and
	// 두 숫자의 λͺ¨λ“  λΉ„νŠΈ μŒμ„ λŒ€μƒμœΌλ‘œ andλ₯Ό ν•œλ‹€

	// | bitwise or
	// 두 숫자의 λͺ¨λ“  λΉ„νŠΈ μŒμ„ λŒ€μƒμœΌλ‘œ orλ₯Ό ν•œλ‹€

	// ^ bitwise wor
	// 두 숫자의 λͺ¨λ“  λΉ„νŠΈ μŒμ„ λŒ€μƒμœΌλ‘œ xorν•œλ‹€

	// << λΉ„νŠΈ 쒌츑 이동
	// λΉ„νŠΈμ—΄μ„ n만큼 μ™Όμͺ½μœΌλ‘œ 이동
	// μ™Όμͺ½μ˜ λ„˜μΉ˜λŠ” n개의 λΉ„νŠΈλŠ” 버림, μƒˆλ‘œ μƒμ„±λ˜λŠ” n개의 λΉ„νŠΈλŠ” 0

	// >> λΉ„νŠΈ 우츑 이동
	// λΉ„νŠΈλ₯Ό n만큼 였λ₯Έμͺ½μœΌλ‘œ 이동
	// 였λ₯Έμͺ½μ˜ λ„˜μΉ˜λŠ” n개의 λΉ„νŠΈλŠ” 버림
	// μ™Όμͺ½ μƒμ„±λ˜λŠ” n개의 λΉ„νŠΈλŠ”
	// - λΆ€ν˜Έκ°€ μ‘΄μž¬ν•  경우 λΆ€ν˜Έ λΉ„νŠΈλ₯Ό 따라감
	// - μ•„λ‹ˆλ©΄ 0

	// Ob0000 [무적][변이][μŠ€ν„΄][곡쀑뢀양]   4bit

	// λ¬΄μ μƒνƒœλ‘œ λ§Œλ“ λ‹€
	flag = (1 << Invincible);   // 0b1000   3칸이동!

	// 변이 μƒνƒœ
	flag |= (1 << PolyMorph);   // Ob1100

	// 무적인지 ν™•μΈν•˜κ³  μ‹Άλ‹€?
	// bitmask
	bool invincible = ((flag & (1 << Invincible)) != 0);

	// λ¬΄μ μ΄κ±°λ‚˜ μŠ€ν„΄ μƒνƒœμΈμ§€ ν™•μΈν•˜κ³  μ‹Άλ‹€
	bool stunOrInvincible = ((flag & 0b1010) != 0);

	
	// 07. μ‚Όν•­ μ—°μ‚°μž
	// 쑰건식? λ³€μˆ˜ 1 : λ³€μˆ˜ 2
	// κ²°κ³Όκ°€ true라면 λ³€μˆ˜ 1을 λ°˜ν™˜, false 라면 λ³€μˆ˜ 2λ₯Ό λ°˜ν™˜

	int x = 20;
	int y = 14;

	int result;

	result = (x > y) ? x : y;

	cout << result << endl;

}

 

 

< ν•¨μˆ˜ >

#include <iostream>
using namespace std;


// 02. ν•¨μˆ˜
// μ €λ²ˆ μ‹œκ°„μ— 객체에 λŒ€ν•΄ μ„€λͺ…ν–ˆλŠ”λ° 속성과 κΈ°λŠ₯이 μžˆλ‹€κ³  ν•˜μ˜€λ‹€.
// μ˜€λŠ˜μ€ μ–΄λ– ν•œ 객체에 λŒ€ν•œ κΈ°λŠ₯을 λ§Œλ“œλ €κ³  ν•œλ‹€.

// μ˜ˆμŠ¬μ΄λΌλŠ” ν”Œλ ˆμ΄μ–΄ 객체가 μ΄λ™ν•˜λŠ” κΈ°λŠ₯을 λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ”
// μ˜ˆμŠ¬μ΄κ°€ 이동할 수 μžˆλ‹€λŠ” 것을 "μ„ μ–Έ"ν•΄μ•Ό ν•˜κ³ 
// ꡬ체적으둜 μ–΄λ–»κ²Œ μ΄λ™ν•˜λŠ”μ§€ "μ •μ˜"ν•΄μ•Ό ν•˜λ©°,
// μ–΄λ–€ μƒν™©μ—μ„œ λ›°λŠ”μ§€ μ•Œλ €μ£Όλ €λ©΄ λ›°λŠ” κΈ°λŠ₯을 "호좜" ν•΄μ•Ό ν•œλ‹€

class YeSeul {
public:
	void Move();       // μ„ μ–Έ
};

void YeSeul::Move()    // μ •μ˜
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” 달린닀" << endl;
}

int main()
{
	YeSeul player;
	player.Move();   // 호좜
}

// * ν•¨μˆ˜μ˜ κ΅¬μ„±μš”μ†Œ
//   : λ°˜ν™˜κ°’ ν•¨μˆ˜λͺ… {λ§€κ°œλ³€μˆ˜ λͺ©λ‘}
//   : λ°˜ν™˜κ°’ - ν•¨μˆ˜λ₯Ό μˆ˜ν–‰ν•œ λ‹€μŒ λ°˜ν™˜ν•˜λŠ” κ°’, μ—†μœΌλ©΄ void
//   : ν•¨μˆ˜λͺ… - ν•¨μˆ˜ μ‹λ³„μš”μ†Œ
//   : λ§€κ°œλ³€μˆ˜ λͺ©λ‘ : ν•¨μˆ˜μ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μž…λ ₯κ°’
#include <iostream>
using namespace std;

// μ•„λž˜μ˜ μ½”λ“œλŠ” 컴파일 μ—λŸ¬ λ°œμƒ
// 클래슀 λ³€μˆ˜μ™€ 클래슀 멀버 ν•¨μˆ˜λŠ” μ‚¬μš© 전에 μ„ μ–Έλ˜μ–΄μ•Ό ν•œλ‹€ !!

// * ν•¨μˆ˜ μ„ μ–Έ
// μ»΄νŒŒμΌλŸ¬λŠ” ν•¨μˆ˜ 선언을 보고 λ°˜ν™˜κ°’μ˜ μžλ£Œν˜•μ΄ 무엇인지 μ•ˆλ‹€
// μ»΄νŒŒμΌλŸ¬λŠ” ν•¨μˆ˜ 선언을 보고 맀개 λ³€μˆ˜μ˜ κ°œμˆ˜κ°€ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•œλ‹€
// μ»΄νŒŒμΌλŸ¬λŠ” ν•¨μˆ˜ 선언을 보고 λ§€κ°œλ³€μˆ˜μ˜ μžλ£Œν˜•μ΄ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•œλ‹€

// * ν•¨μˆ˜ μ •μ˜
// μ •μ˜κ°€ 없을 경우 -> LNK2019, LNK1120 였λ₯˜
// κΈ°λŠ₯을 μ‹€μ œλ‘œ κ΅¬ν˜„ν•˜λŠ” 뢀뢄이기에 μ—†μœΌλ©΄ μ•ˆλ¨


int main()
{
	YeSeul player;
	player.Move();   // 호좜
}

class YeSeul {
public:
	void Move();       // μ„ μ–Έ
};

void YeSeul::Move()    // μ •μ˜
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” 달린닀" << endl;
#include <iostream>
using namespace std;

// * 값에 μ˜ν•œ 호좜과 참쑰에 μ˜ν•œ 호좜 & λ§€κ°œλ³€μˆ˜

// 값에 μ˜ν•œ ν˜ΈμΆœμ€ λ³€μˆ˜λ₯Ό λ³΅μ‚¬ν•˜λŠ” 것과 같은 κ°œλ…

class Restaurant
{
public:
	int steakCost;
};

class YeSeul {
public:
	void Move();       // μ„ μ–Έ
	int Eat(int);
	int Eat2(int&);
	int Eat3(int steakCost3);
	int Eat4(int steakCost3, int coffeeCost, int iceCost);
};

void YeSeul::Move()    // μ •μ˜
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” 달린닀" << endl;
}

int YeSeul::Eat(int steakCost2)
{
	steakCost2 = 10000;
	return steakCost2;
}

int YeSeul::Eat2(int& steakCost2)
{
	steakCost2 = 10000;
	return steakCost2;
}

int YeSeul::Eat3(int steakCost3)
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨ΉλŠ”λ‹€" << endl;
	
	return steakCost3;
}

int YeSeul::Eat4(int steakCost3, int coffeeCost, int iceCost)
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨Ήκ³ , " <<
		coffeeCost << "μ›μ§œλ¦¬ 컀피λ₯Ό λ§ˆμ‹œκ³ , " <<
		iceCost << "μ›μ§œλ¦¬ μ•„μ΄μŠ€ν¬λ¦Όμ„ λ¨ΉλŠ”λ‹€." << endl;

	return steakCost3;
}

int main()
{
	YeSeul player;
	Restaurant rest, rest2;

	rest.steakCost = 20000;  
	rest2.steakCost = 20000;

	// rest
	cout << "μ˜ˆμŠ¬μ΄λŠ” " << player.Eat(rest.steakCost) <<
		"μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨Ήμ—ˆλ‹€κ³  거짓말 ν–ˆλ‹€." << endl;   
	cout << "λ ˆμŠ€ν† λž‘μ€ μ˜ˆμŠ¬μ΄κ°€ " << rest.steakCost <<
		"μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨Ήμ—ˆλ‹€κ³  μ•Œκ³  μžˆλ‹€." << endl;

	// rest2
	cout << "μ˜ˆμŠ¬μ΄λŠ” " << player.Eat2(rest.steakCost) <<
		"μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨Ήμ—ˆλ‹€κ³  거짓말 ν–ˆλ‹€." << endl;
	cout << "λ ˆμŠ€ν† λž‘μ€ μ˜ˆμŠ¬μ΄κ°€ " << rest.steakCost <<
		"μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨Ήμ—ˆλ‹€κ³  μ•Œκ³  μžˆλ‹€." << endl;

	// λ§€κ°œλ³€μˆ˜
	player.Eat3(30000);
	player.Eat4(43333, 3000, 1000);

}

// main -> int YeSeul::Eat(int steakCost)ν•¨μˆ˜ μ‹€ν–‰ -> main

// rest μ‹€ν–‰ - 값에 μ˜ν•œ 호좜
// ν•¨μˆ˜ 호좜 -> μŠ€ν…Œμ΄ν¬ 가격이 λ§€κ°œλ³€μˆ˜λ‘œ 듀어감. 값에 μ˜ν•œ 호좜 방식


// rest2 μ‹€ν–‰ - 참쑰에 μ˜ν•œ 호좜
// ν•¨μˆ˜ 호좜 ->  λ§€κ°œλ³€μˆ˜λ₯Ό μŠ€ν…Œμ΄ν¬ κ°€κ²©μœΌλ‘œ μ΄ˆκΈ°ν™”,
// μ°Έμ‘°μžμž„μœΌλ‘œ λ‹¨μˆœνžˆ 값을 λ³΅μ‚¬ν•˜λŠ” 것이 μ•„λ‹Œ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•˜μ—¬
// Eat2 ν•¨μˆ˜μ˜ streakCostλŠ” rest2의 steakCost λ³€μˆ˜μ˜ 별칭이 λœλ‹€.
// 따라 두 λ³€μˆ˜ 쀑 ν•˜λ‚˜λΌλ„ 값을 λ³€κ²½ν•˜κ²Œ 되면 μŠ€ν…Œμ΄ν¬ 값이 λ³€κ²½ 됨
// 참쑰에 μ˜ν•œ 호좜 방식은 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ™ΈλΆ€μ˜ 값을 λ³€κ²½ν•  수 μžˆλ‹€ (맀우 μ€‘μš”) 

// λ§€κ°œλ³€μˆ˜λ₯Ό μ—¬λŸ¬ 개 λ§Œλ“€ 수 μžˆλ‹€.
#include <iostream>
using namespace std;

// ** ν•¨μˆ˜ μ˜€λ²„λ‘œλ”©
// overloading : 짐을 많이 μ‹£λŠ”λ‹€
// C++의 μ€‘μš”ν•œ κ°œλ…, λ‹€ν˜•μ„±κ³Ό λ°€μ ‘ν•˜κΈ°μ—
// μ€‘μš”ν•œ κ°œλ…μ΄λ‹€

// ν•˜λ‚˜μ˜ ν•¨μˆ˜μ— 계속 μŒ“λŠ”λ‹€
// μš°λ¦¬κ°€ μ§€κΈˆκΉŒμ§€ ν–ˆλ˜ κ²ƒμ˜ 이름을 λ™μΌν•˜κ²Œ λ§Œλ“€μž
// 단 λ§€κ°œλ³€μˆ˜ λͺ©λ‘μ€ 달라야 ν•œλ‹€. (참쑰인 경우 -> νƒ€μž…μ΄ κ°™μœΌλ©΄ x)

class Restaurant
{
public:
	int steakCost;
};

class YeSeul {
public:
	void Move();       // μ„ μ–Έ
	int Eat(int);
	double  Eat(double);
	int Eat(int steakCost3, int coffeeCost, int iceCost);
};

void YeSeul::Move()    // μ •μ˜
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” 달린닀" << endl;
}

int YeSeul::Eat(int steakCost3)
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨ΉλŠ”λ‹€" << endl;
	
	return steakCost3;
}


double YeSeul::Eat(double steakCost3)
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨ΉλŠ”λ‹€" << endl;

	return steakCost3;
}

int YeSeul::Eat(int steakCost3, int coffeeCost, int iceCost)
{
	cout << "μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨Ήκ³ , " <<
		coffeeCost << "μ›μ§œλ¦¬ 컀피λ₯Ό λ§ˆμ‹œκ³ , " <<
		iceCost << "μ›μ§œλ¦¬ μ•„μ΄μŠ€ν¬λ¦Όμ„ λ¨ΉλŠ”λ‹€." << endl;

	return steakCost3;
}

int main()
{
	YeSeul player;
	Restaurant rest, rest2;

	rest.steakCost = 20000;  
	rest2.steakCost = 20000;

	// rest
	cout << "μ˜ˆμŠ¬μ΄λŠ” " << player.Eat(rest.steakCost) <<
		"μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨Ήμ—ˆλ‹€κ³  거짓말 ν–ˆλ‹€." << endl;   
	cout << "λ ˆμŠ€ν† λž‘μ€ μ˜ˆμŠ¬μ΄κ°€ " << rest.steakCost <<
		"μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨Ήμ—ˆλ‹€κ³  μ•Œκ³  μžˆλ‹€." << endl;

	// λ§€κ°œλ³€μˆ˜
	player.Eat(30000);
	player.Eat(30000.0);
	player.Eat(43333, 3000, 1000);

}

 

 

 

< 인라인(inline) ν•¨μˆ˜ >

#include <iostream>
using namespace std;

// * inline ν•¨μˆ˜

// μž₯점 : ν•¨μˆ˜ μ •μ˜λΆ€κ°€ μ‹€ν–‰ μ½”λ“œλ₯Ό λŒ€μ²΄ ν•˜λ―€λ‘œ, μ‹€ν–‰ 상 μ˜€λ²„ν—€λ“œκ°€ 쀄어 속도 빠름
// 단점 : ν•¨μˆ˜ μ •μ˜λΆ€κ°€ κΈΈλ©΄ 인라인 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 얻을 수 μžˆλŠ” μž₯점 쀄어듦
// (ν˜ΈμΆœν•˜λŠ” ꡬ문이 λͺ¨λ‘ 인라인 ν•¨μˆ˜μ˜ μ •μ˜λ‘œ λ°”λ€Œμ–΄ 전체 μ½”λ“œ 양이 증가함)

class YeSeul {
public:
	void Eat(int);
	inline void EatInline(int steakCost3)
	{
		cout << "EatInline() :: μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨ΉλŠ”λ‹€" << endl;
	}
};

void YeSeul::Eat(int steakCost3)
{
	cout << "Eat() :: μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨ΉλŠ”λ‹€" << endl;
}

int main()
{
	YeSeul player;
	player.Eat(500);    // μž‘λ™λ°©μ‹ 볡작 ) main -> eatν•¨μˆ˜ -> ν•¨μˆ˜ μ‹€ν–‰ -> main
	player.EatInline(1500);    // (ν•¨μˆ˜ 호좜 단계 μ€„μŒ) μ½”λ“œ λŒ€μ²΄λ¨ ) cout << "EatInline() :: μ˜ˆμŠ¬μ΄λŠ” " << ....
}

 

 

 

< λžŒλ‹€ ν•¨μˆ˜ >

#include <iostream>
using namespace std;

// * λžŒλ‹€ ν•¨μˆ˜
// λ³΅μž‘ν•œ ν•¨μˆ˜ 호좜 κ³Όμ • μƒλž΅ν•΄ μ‹œκ°„ μ ˆμ•½ 및 가독성 UP
// : 인라인으둜 μ •μ˜μ™€ ν˜ΈμΆœμ„ ν•œ λ²ˆμ— ν•˜λŠ” ν•¨μˆ˜

// [캑처]    (λ§€κ°œλ³€μˆ˜ λͺ©λ‘)     mutable     μ˜ˆμ™Έλͺ©λ‘    -> λ°˜ν™˜ν˜•    {ν•¨μˆ˜ λͺΈμ²΄}


class YeSeul {
public:
	void Eat(int);
	inline void EatInline(int steakCost3)
	{
		cout << "EatInline() :: μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨ΉλŠ”λ‹€" << endl;
	}
};

void YeSeul::Eat(int steakCost3)
{
	cout << "Eat() :: μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨ΉλŠ”λ‹€" << endl;
}

int main()
{
	YeSeul player;
	player.Eat(500);    
	player.EatInline(1500);    

	[](int steakCost3) {
		cout << "eatLamda():: μ˜ˆμŠ¬μ΄λŠ” " << steakCost3 << "μ›μ§œλ¦¬ μŠ€ν…Œμ΄ν¬λ₯Ό λ¨ΉλŠ”λ‹€" << endl;}(1000);
}

 

 

 

< Class >

#include <iostream>
using namespace std;

#define NAME_LEN 20
#define SEX_LEN 10
#define JOB_LEN 20
#define CHARACTER_LEN 20

// 03. Class

// 데이터 은닉 (ꡬ쑰체와 λ‹€λ₯Έ 점 -> μ–˜λŠ” κ·Έλƒ₯ λͺ¨λ“ κ²Œ public)
// : 클래슀 μ•ˆμ˜ 속성과 κΈ°λŠ₯을 μ„ νƒμ μœΌλ‘œ 숨길 수 μžˆλ‹€
// μˆ¨κΈ°λŠ” 이유 : μžμ‹ μ˜ 속성과 κΈ°λŠ₯을 λ‹€λ₯Έ μ˜μ—­μ—μ„œ λ³€κ²½ν•˜μ§€ λͺ»ν•˜λ„둝 ν•΄μ•Όν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€

// 멀버 μ ‘κ·Ό μ§€μ •μž
// public : 클래슀 λ‚΄λΆ€, μ™ΈλΆ€ λͺ¨λ‘ 멀버에 μ ‘κ·Ό κ°€λŠ₯함  -> μΈν„°νŽ˜μ΄μŠ€ ν•¨μˆ˜
// private : 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ 멀버에 μ ‘κ·Ό κ°€λŠ₯함 -> 보톡 멀버 λ³€μˆ˜
// protected : 기본적으둜 클래슀 λ‚΄λΆ€ μ˜μ—­μ—μ„œλ§Œ 클래슀 멀버에 μ ‘κ·Ό κ°€λŠ₯ν•˜λ‚˜,
//             μƒμ†κ΄€κ³„μ—μ„œλŠ” μƒμœ„ 클래슀 멀버에 μ ‘κ·Ό κ°€λŠ₯ν•˜λ„λ‘ ν•œλ‹€.


// 객체λ₯Ό λΆ•μ–΄λΉ΅ ν‹€μ²˜λŸΌ 찍어낼 수 있으며
// 이듀은 μ„œλ‘œ μƒν˜Έμž‘μš© ν•  수 있음

class Person {

public:
	// μƒμ„±μžμ™€ 같은 μ—­ν• , 좔후에 배울 μ˜ˆμ •
	void constructor(const char* name, const char* sex, const char* job, const char* character, int age, bool marriageStatus)
	{
		strcpy_s(this->name, name);
		strcpy_s(this->sex, sex);
		strcpy_s(this->job, job);
		strcpy_s(this->character, character);
		this->age = age;
		this->marriageStatus = marriageStatus;
		// μžμ‹ μ„ κ°€λ₯΄ν‚€λŠ” 포인터 (this) : μΆ”ν›„ 배울 μ˜ˆμ •
	}

	void introduce()
	{
		cout << "이름: " << name << endl;
		cout << "성별: " << sex << endl;
		cout << "직업: " << job << endl;
		cout << "성격: " << character << endl;
		cout << "λ‚˜μ΄: " << age << endl;
		cout << "κ²°ν˜Όμ—¬λΆ€: " << (marriageStatus ? "YES" : "NO") << endl;
	}

	void eat(const char* food)
	{
		cout << name << "은(λŠ”) " << food << "λ₯Ό λ¨ΉλŠ”λ‹€" << endl;
	}

	void sleep()
	{
		cout << name << "은(λŠ”) μž”λ‹€" << endl;
	}

	void drive(const char* destination)
	{
		cout << name << "은(λŠ”)" << destination << "으둜 μš΄μ „ν•œλ‹€" << endl;
	}

	void write()
	{
		cout << name << "은(λŠ”) 책을 μ“΄λ‹€" << endl;
	}

	void read()
	{
		cout << name << "은(λŠ”) 책을 μ½λŠ”λ‹€" << endl;
	}

private:
	char name[NAME_LEN];
	char sex[SEX_LEN];
	char job[JOB_LEN];
	char character[CHARACTER_LEN];
	int age;
	bool marriageStatus;
};

int main()
{
	Person player1, player2;

	player1.constructor("미영", "μ—¬μ„±", "μ½”λ”©λ…Έμ˜ˆ", "κ³ μ§‘", 23, false);
	player2.constructor("바보", "남성", "학생", "μ„±μ‹€", 23, true);


	player1.introduce();
	player2.introduce();

	player1.eat("λ§ˆλΌνƒ•");
}
#include <iostream>
using namespace std;

#define NAME_LEN 20
#define SEX_LEN 10
#define JOB_LEN 20
#define CHARACTER_LEN 20

// 03. Class

// λ©€λ²„ν•¨μˆ˜ μ„ μ–Έκ³Ό μ •μ˜ 뢄리
// :: (λ²”μœ„ μ§€μ • μ—°μ‚°μž) μ‚¬μš©

class Person {

public:
	void constructor(const char* name, const char* sex, const char* job, const char* character, int age, bool marriageStatus);
	void introduce();
	void eat(const char* food);
	void sleep();
	void drive(const char* destination);
	void write();
	void read();

private:
	char name[NAME_LEN];
	char sex[SEX_LEN];
	char job[JOB_LEN];
	char character[CHARACTER_LEN];
	int age;
	bool marriageStatus;
};

int main()
{
	Person player1, player2;

	player1.constructor("미영", "μ—¬μ„±", "μ½”λ”©λ…Έμ˜ˆ", "κ³ μ§‘", 23, false);
	player2.constructor("바보", "남성", "학생", "μ„±μ‹€", 23, true);


	player1.introduce();
	player2.introduce();

	player1.eat("λ§ˆλΌνƒ•");
}

void Person::constructor(const char* name, const char* sex, const char* job, const char* character, int age, bool marriageStatus)
{
	strcpy_s(this->name, name);
	strcpy_s(this->sex, sex);
	strcpy_s(this->job, job);
	strcpy_s(this->character, character);
	this->age = age;
	this->marriageStatus = marriageStatus;
	// μžμ‹ μ„ κ°€λ₯΄ν‚€λŠ” 포인터 (this) : μΆ”ν›„ 배울 μ˜ˆμ •
}

void Person::introduce()
{
	cout << "이름: " << name << endl;
	cout << "성별: " << sex << endl;
	cout << "직업: " << job << endl;
	cout << "성격: " << character << endl;
	cout << "λ‚˜μ΄: " << age << endl;
	cout << "κ²°ν˜Όμ—¬λΆ€: " << (marriageStatus ? "YES" : "NO") << endl;
}

void Person::eat(const char* food)
{
	cout << name << "은(λŠ”) " << food << "λ₯Ό λ¨ΉλŠ”λ‹€" << endl;
}

void Person::sleep()
{
	cout << name << "은(λŠ”) μž”λ‹€" << endl;
}

void Person::drive(const char* destination)
{
	cout << name << "은(λŠ”)" << destination << "으둜 μš΄μ „ν•œλ‹€" << endl;
}

void Person::write()
{
	cout << name << "은(λŠ”) 책을 μ“΄λ‹€" << endl;
}

void Person::read()
{
	cout << name << "은(λŠ”) 책을 μ½λŠ”λ‹€" << endl;
}