League Of Legends - Link Select 02. ์—ฐ์‚ฐ์ž / ํ•จ์ˆ˜ / ํด๋ž˜์Šค
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค“ Study/C++ & C#

02. ์—ฐ์‚ฐ์ž / ํ•จ์ˆ˜ / ํด๋ž˜์Šค

by GAMEMING 2024. 3. 13.
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;
}