[C++] ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ

2024. 4. 30. 16:31ยท ๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๐ŸŽ  C++

๐ŸŸฉ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ

ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ, ์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์€ ํ•จ์ˆ˜๋ช…, ์ƒ์„ฑ์ž๋ช…์ด ๊ฐ™์œผ๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์ด๋‚˜ ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜์ด๋‹ค. ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด์„œ ์—ฐ์‚ฐ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

#include <iostream>
using namespace std;

class NUMBOX
{
private:
	int num1, num2;
public:
	NUMBOX(int num1, int num2) : num1(num1), num2(num2) { }
	void ShowNumber() 
	{
		cout << "num1: " << num1 << ", num2: " << num2 << endl;
	}
};

int main()
{
	NUMBOX nb1(10, 20);
	NUMBOX nb2(5, 2);
	NUMBOX result = nb1 + nb2; // ์—ฌ๊ธฐ๋ฅผ ํ™•์ธ

	nb1.ShowNumber();
	nb2.ShowNumber();
}
๐Ÿ•ท๏ธ ์—๋Ÿฌ
1 IntelliSense: ์ด๋Ÿฌํ•œ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์ผ์น˜ํ•˜๋Š” "+" ์—ฐ์‚ฐ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
            ํ”ผ์—ฐ์‚ฐ์ž ํ˜•์‹์ด NUMBOX + NUMBOX์ž…๋‹ˆ๋‹ค. c:\Users\h4ckfory0u\Documents\Visual Studio 2012\Projects\ConsoleApplication4\ConsoleApplication4\์†Œ์Šค.cpp 21 22 ConsoleApplication4

 

nb1๊ณผ nb2๋ฅผ ๋”ํ•œ ๊ฐ’์„ result๋กœ ๋Œ€์ž…ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์—๋Ÿฌ์— "+" ์—ฐ์‚ฐ์ž๊ฐ€ ์—†๋‹ค๊ณ  ๋‚˜์˜จ๋‹ค.

์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ์กด์— ์žˆ๋˜ + ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹Œ, NUMBOX ๊ฐ์ฒด ๋ผ๋ฆฌ์˜ ๋ง์…ˆ์ด ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

#include <iostream>
using namespace std;

class NUMBOX
{
private:
	int num1, num2;
public:
	NUMBOX(int num1, int num2) : num1(num1), num2(num2) { }
	void ShowNumber() 
	{
		cout << "num1: " << num1 << ", num2: " << num2 << endl;
	}
	NUMBOX operator+(NUMBOX &ref)
	{
		return NUMBOX(num1+ref.num1, num2+ref.num2);
	}
};

int main()
{
	NUMBOX nb1(10, 20);
	NUMBOX nb2(5, 2);
	NUMBOX result = nb1 + nb2;

	nb1.ShowNumber();
	nb2.ShowNumber();
	result.ShowNumber();
}
num1: 10, num2: 20
num1: 5, num2: 2
num1: 15, num2: 22

 

๐ŸŒŸ operator+ ํ•จ์ˆ˜

์ „๋‹ฌ๋ฐ›์€ ๊ฐ์ฒด์™€ ์ž์‹ ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์„œ๋กœ ๋”ํ•ด NUMBOX ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ์ž„์‹œ ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. 

์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. nb1 ๊ฐ์ฒด์˜ operator+  ํ•จ์ˆ˜๋กœ nb2 ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋„˜๊ฒจ์ค€๋‹ค. ๊ฒฐ๊ณผ๋Š” 100% ๋™์ผํ•˜๋‹ค.

NUMBOX result = nb1 + nb2 = nb1.operator+(nb2);

 

operator+๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ operator<์—ฐ์‚ฐ์ž>(operator+, operator-, operator* ๋“ฑ)์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ชจ๋“  ์—ฐ์‚ฐ์ž๋“ค์ด ์˜ค๋ฒ„๋กœ๋”ฉ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ ์—ฐ์‚ฐ์ž์˜ ๊ธฐ๋Šฅ์—์„œ ์•ฝ๊ฐ„ ๋” ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ๋ฟ, ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

 

๋‘  ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์ž๋ฃŒํ˜•์ด ๋‹ฌ๋ผ๋„ ์œ„์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

#include <iostream>

using namespace std;

class NUMBOX
{
private:
	int num1, num2;
public:
	NUMBOX(int num1, int num2) : num1(num1), num2(num2) { }
	void ShowNumber() 
	{
		cout << "num1: " << num1 << ", num2: " << num2 << endl;
	}
	NUMBOX operator+(int num)
	{
		return NUMBOX(num1+num, num2+num);
	}
};

int main()
{
	NUMBOX nb1(10, 20);
	NUMBOX result = nb1 + 10;

	nb1.ShowNumber();
	result.ShowNumber();
}
num1: 10, num2: 20
num1: 20, num2: 30
๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . .

์—ฐ์‚ฐ์ž ๋ชธ์ฒด๋ฅผ ๋ณด๋ฉด, ์ธ์ž๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž์—๊ฒŒ num1+num, num2+num ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ์–ด ์ดˆ๊ธฐํ™”๊ฐ€ ์ง„ํ–‰๋œ ๋’ค, ์ด ์ž„์‹œ ๊ฐ์ฒด๋Š” ์†Œ๋ฉธํ•œ๋‹ค. ์ด์–ด์„œ, main ํ•จ์ˆ˜์˜ result๋Š” ์ •์ˆ˜ํ˜•๊ณผ NUMBOX ๊ฐ์ฒด๊ฐ„์˜ ๋ง์…ˆ์ด ์˜ค๋ฅ˜์—†์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

NUMBOX result = 10 + nb1;
๐Ÿ•ท๏ธ ์—๋Ÿฌ
1 IntelliSense: ์ด๋Ÿฌํ•œ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์ผ์น˜ํ•˜๋Š” "+" ์—ฐ์‚ฐ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
            ํ”ผ์—ฐ์‚ฐ์ž ํ˜•์‹์ด int + NUMBOX์ž…๋‹ˆ๋‹ค. c:\Users\h4ckfory0u\Documents\Visual Studio 2012\Projects\ConsoleApplication4\ConsoleApplication4\์†Œ์Šค.cpp 24 21 ConsoleApplication4

ํด๋ž˜์Šค ๋‚ด์— ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜์˜€๋‹ค. 10+nb1์€ 10.operator+(nb1)๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ธ์‹์ด ๋œ๋‹ค. 10์ด๋ž€ ์ •์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ์— operator+๋ž€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋„ ์—†์„ ๋ฟ๋”๋Ÿฌ, NUMBOX ๊ฐ์ฒด๋ฅผ ๋„˜๊ธฐ๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜์—ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ „์—ญ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐ŸŸฉ ์ „์—ญ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ

๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ์˜ค๋ฒ„๋กœ๋”ฉ์€ "๊ฐ์ฒด.operator+(ํ”ผ์—ฐ์‚ฐ์ž), ๊ฐ์ฒด + ํ”ผ์—ฐ์‚ฐ์ž"์‹์œผ๋กœ ์ด๋ฃจ์–ด์ ธ, ์ž๋ฃŒํ˜•์ด ๋‹ค๋ฅธ ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์—ฐ์‚ฐ์‹œ, ๋ฐ˜๋“œ์‹œ ๊ฐ์ฒด๊ฐ€ ์™ผ์ชฝ์— ์œ„์น˜ํ•ด์•ผ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด์—, ์ „์—ญ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ์˜ค๋ฒ„๋กœ๋”ฉ์€ "operator+(ํ”ผ์—ฐ์‚ฐ์ž, ํ”ผ์—ฐ์‚ฐ์ž), ํ”ผ์—ฐ์‚ฐ์ž+ํ”ผ์—ฐ์‚ฐ์ž"์˜ ์‹์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ๋’ค์— ์œ„์น˜ํ•ด๋„ ์ •์ƒ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

ํ”ผ์—ฐ์‚ฐ์ž + ํ”ผ์—ฐ์‚ฐ์ž = operator+(ํ”ผ์—ฐ์‚ฐ์ž, ํ”ผ์—ฐ์‚ฐ์ž)
#include <iostream>

using namespace std;

class NUMBOX
{
private:
	int num1, num2;
public:
	NUMBOX(int num1, int num2) : num1(num1), num2(num2) { }
	void ShowNumber() 
	{
		cout << "num1: " << num1 << ", num2: " << num2 << endl;
	}
	NUMBOX operator+(int num)
	{
		return NUMBOX(num1+num, num2+num);
	}
	friend NUMBOX operator+(int num, NUMBOX ref);
};

NUMBOX operator+(int num, NUMBOX ref)
{
	ref.num1 += num;
	ref.num2 += num;

	return ref;
}

int main()
{
	NUMBOX nb1(10, 20);
	NUMBOX result = 10 + nb1 + 40;

	nb1.ShowNumber();
	result.ShowNumber();
}

 

num1: 10, num2: 20
num1: 60, num2: 70
๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . .

friend๊ฐ€ ๋ถ™์€ ์ด์œ ๋Š”, ์ด ํ•จ์ˆ˜๊ฐ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉค๋ฒ„ ๋ฒˆ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ถ™์—ฌ์ค€ ๊ฒƒ์ด๋‹ค. ์ „์—ญํ•จ์ˆ˜๋กœ operator+ ํ•จ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋กœ ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ†ตํ•˜์—ฌ operator+(10,nb1)์œผ๋กœ ์ธ์‹๋œ๋‹ค. ์ด์–ด์„œ 10๊ณผ nb1์„ ๋”ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ์—์„œ 40์„ ๋”ํ•˜์—ฌ result์— ๋Œ€์ž…์‹œ์ผœ์ค€๋‹ค. 

 

๐ŸŸฉ ๋‹จํ•ญ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ

์ฆ๊ฐ€, ์ฆ๊ฐ ์—ฐ์‚ฐ์ž ํ™•์ธ

#include <iostream>

using namespace std;

class NUMBOX
{
private:
	int num1, num2;
public:
	NUMBOX() { }
	NUMBOX(int num1, int num2) : num1(num1), num2(num2) { }
	void ShowNumber() 
	{
		cout << "num1: " << num1 << ", num2: " << num2 << endl;
	}
	NUMBOX operator++()
	{
		num1+=1;
		num2+=1;
		return *this;
	}
	NUMBOX operator++(int)
	{
		NUMBOX temp(*this);
		num1+=1;
		num2+=1;
		return temp;
	}
};

int main()
{
	NUMBOX nb1(10, 20);
	NUMBOX nb2;

	nb2 = nb1++;
	nb2.ShowNumber();
	nb1.ShowNumber();
	
	nb2 = ++nb1;
	nb2.ShowNumber();
	nb1.ShowNumber();
}

 

num1: 10, num2: 20
num1: 11, num2: 21
num1: 12, num2: 22
num1: 12, num2: 22
๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . .

*this๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๋Š” this๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ, *this๋Š” this ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด, ์‹ค์งˆ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ํ˜•์‹์€ ์ „์œ„ ์ฆ๊ฐ€ ์—ฐ์‚ฐ์ด๋‹ค.

 

์ „์œ„/ํ›„์œ„ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๊ตฌ๋ถ„

++nb = nb.operator++(); // ์ „์œ„ ์ฆ๊ฐ€ ์—ฐ์‚ฐ
nb++ = nb.operator++(int); // ํ›„์œ„ ์ฆ๊ฐ€ ์—ฐ์‚ฐ

int๋Š” ๋‹จ์ง€ ์ „์œ„, ํ›„์œ„ ์ฆ๊ฐ€ ์—ฐ์‚ฐ์„ ๊ตฌ๋ถ„ํ•ด์ฃผ๋Š” ๊ธฐ์ค€์ผ ๋ฟ, int ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค๋Š” ๋œป์ด ์•„๋‹ˆ๋‹ค. 

 

๐ŸŸฉ ๋Œ€์ž… ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ

#include <iostream>

using namespace std;

class A
{
private:
	int num1, num2;
public:
	A() { } // ๋””ํดํŠธ ์ƒ์„ฑ์ž
	A(int num1, int num2) : num1(num1), num2(num2) { }
	void ShowData() { cout << num1 << ", " << num2 << endl; }
};

class B
{
private:
	int num1, num2;
public:
	B() { }
	B(int num1, int num2) : num1(num1), num2(num2) { }
	void ShowData() { cout << num1 << ", " << num2 << endl; }
};

int main()
{
	A a1(10, 50);
	A a2;
	B b1(10, 20);
	B b2;

	a2 = a1;
	b2 = b1;

	a2.ShowData();
	b2.ShowData();
	return 0;
}
10, 50
10, 20
๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . .

main  ํ•จ์ˆ˜์—์„œ a1 ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง๊ณผ ๋™์‹œ์— ์ƒ์„ฑ์ž์—๊ฒŒ 10๊ณผ 50์„ ๊ฐ๊ฐ ์ „๋‹ฌํ•˜๊ณ , ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ num1, num2๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. a2 ๊ฐ์ฒด๋Š” ๋งŒ๋“ค์–ด์ง€๊ณ , ๋””ํดํŠธ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค(์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์Œ). ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ b1์€ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋˜๊ณ , b2์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์ดํ›„ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๊ฐ€ ์“ฐ์˜€๋Š”๋ฐ, ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์•˜์Œ์—๋„ ์ด๋Ÿฐ ๋ฌธ์žฅ์€ ์ •์ƒ์ ์œผ๋กœ ๋ฉค๋ฒ„ ๋Œ€ ๋ฉค๋ฒ„ ๋ณต์‚ฌ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์‚ฌ์‹ค์€, ๋””ํดํŠธ ๋ณต์‚ฌ ์ƒ์„ฑ์ž์™€ ๊ฐ™์ด, ๋Œ€์ž… ์—ฐ์‚ฐ์ž๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์œผ๋ฉด ๋””ํดํŠธ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฝ์ž…๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฉค๋ฒ„ ๋Œ€ ๋ฉค๋ฒ„๋กœ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ์•„๋‹Œ ์–•์€ ๋ณต์‚ฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

#include <iostream>

using namespace std;

class Student
{
private:
	char * name;
	int age;
public:
	Student(char * name, int age) : age(age) 
	{
		this->name = new char[10];
		strcpy(this->name, name);
	}
	void ShowInfo() {
		cout << "์ด๋ฆ„: " << name << endl;
		cout << "๋‚˜์ด: " << age << endl;
	}
	~Student()
	{
		delete []name;
		cout << "~Student ์†Œ๋ฉธ์ž ํ˜ธ์ถœ!" << endl;
	}
};

int main()
{
	Student st1("๊น€์ฒ ์ˆ˜", 14);
	Student st2("ํ™๊ธธ๋™", 15);

	st2 = st1;

	st1.ShowInfo();
	st2.ShowInfo();
	return 0;
}

 

์ด๋ฆ„: ๊น€์ฒ ์ˆ˜
๋‚˜์ด: 14
์ด๋ฆ„: ๊น€์ฒ ์ˆ˜
๋‚˜์ด: 14
~Student ์†Œ๋ฉธ์ž ํ˜ธ์ถœ!
๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . .

๋””ํดํŠธ ๋Œ€์ž… ์—ฐ์‚ฐ์ž์— ์˜ํ•ด ๋ฉค๋ฒ„ ๋Œ€ ๋ฉค๋ฒ„ ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฉด์„œ str2๋Š” "ํ™๊ธธ๋™"์ด ์•„๋‹Œ "๊น€์ฒ ์ˆ˜"๋ž€ ๋ฌธ์ž์—ด์ด ๋‹ด๊ธด ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , "ํ™๊ธธ๋™"์ด๋ž€ ๋ฌธ์ž์—ด์€ ์ ‘๊ทผ๋„, ์†Œ๋ฉธ๋„ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋˜ํ•œ ๊ฐ์ฒด์˜ ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, st1, st2 ๊ฐ์ฒด ๋ชจ๋‘ "๊น€์ฒ ์ˆ˜"๋ž€ ๋ฌธ์ž์—ด์ด ๋‹ด๊ธด ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  delete๋ฅผ ํ†ตํ•ด ์†Œ๋ฉธํ•  ๋•Œ ์ค‘๋ณต ์†Œ๋ฉธํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

๐Ÿ‘‰ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

#include <iostream>

using namespace std;

class Student
{
private:
	char * name;
	int age;
public:
	Student(char * name, int age) : age(age) 
	{
		this->name = new char[10];
		strcpy(this->name, name);
	}
	void ShowInfo() {
		cout << "์ด๋ฆ„: " << name << endl;
		cout << "๋‚˜์ด: " << age << endl;
	}
	Student& operator=(Student& ref)
	{
		delete []name;
		name = new char[10];
		strcpy(name, ref.name);
		age = ref.age;
		return *this;
	}
	~Student()
	{
		delete []name;
		cout << "~Student ์†Œ๋ฉธ์ž ํ˜ธ์ถœ!" << endl;
	}
};

int main()
{
	Student st1("๊น€์ฒ ์ˆ˜", 14);
	Student st2("ํ™๊ธธ๋™", 15);

	st2 = st1;

	st1.ShowInfo();
	st2.ShowInfo();
	return 0;
}

 

์ด๋ฆ„: ๊น€์ฒ ์ˆ˜
๋‚˜์ด: 14
์ด๋ฆ„: ๊น€์ฒ ์ˆ˜
๋‚˜์ด: 14
~Student ์†Œ๋ฉธ์ž ํ˜ธ์ถœ!
๊ณ„์†ํ•˜๋ ค๋ฉด ์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค . . .

๋Œ€์ž… ์—ฐ์‚ฐ์ž๋ฅผ ์ •์˜(์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ)ํ•˜๊ณ  ์žˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด name์„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ ํ•ด์ œํ•˜๊ณ , ์ƒˆ๋กœ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•œ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์ฝ”๋“œ ํ™•์ธํ•˜๋ฉด ์ดํ•ด ๊ฐ€๋Šฅ.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด, "ํ™๊ธธ๋™"์ด๋ž€ ๋ฌธ์ž์—ด์ด ํ•ด์ œ๋˜์ง€ ์•Š๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋‚จ์•„์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ณ (delete ์—ฐ์‚ฐ), ์ •์˜๋œ ๋Œ€์ž… ์—ฐ์‚ฐ์ž์— ์˜ํ•ด ๋ณต์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ , st1์˜ "๊น€์ฒ ์ˆ˜"์™€, st2 "๊น€์ฒ ์ˆ˜"๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.


์ฐธ๊ณ  ์ž๋ฃŒ

https://blog.hexabrain.net/177

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ > ๐ŸŽ  C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++] ํ…œํ”Œ๋ฆฟ(Template)  (0) 2024.05.08
[C++] String ํด๋ž˜์Šค ๋””์ž์ธ  (0) 2024.05.06
[C++] ๊ฐ€์ƒ์˜ ์›๋ฆฌ์™€ ๋‹ค์ค‘์ƒ์†  (0) 2024.04.29
[C++] ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ | ๊ฐ€์ƒํ•จ์ˆ˜(virtual function) | ์ฐธ์กฐ์ž  (1) 2024.04.26
[C++] ์ƒ์†  (0) 2024.04.23
'๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๐ŸŽ  C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C++] ํ…œํ”Œ๋ฆฟ(Template)
  • [C++] String ํด๋ž˜์Šค ๋””์ž์ธ
  • [C++] ๊ฐ€์ƒ์˜ ์›๋ฆฌ์™€ ๋‹ค์ค‘์ƒ์†
  • [C++] ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ | ๊ฐ€์ƒํ•จ์ˆ˜(virtual function) | ์ฐธ์กฐ์ž
peewoong
peewoong
peewoong
peewoong.log
peewoong
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • ๐Ÿ™‚ Info
    • ๐ŸŽฎ ๊ฒŒ์ž„ ๊ด€๋ จ ๊ฐœ๋…
    • ๐Ÿ‘ฉโ€๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ๐ŸŽญ C
      • ๐ŸŽ  C++
      • ๐Ÿ• C#
      • โœจ ์ž๋ฃŒ๊ตฌ์กฐ
      • ๐ŸŽ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ๐Ÿ”ข ์ˆ˜ํ•™
      • ๐ŸŽจ ๊ทธ๋ž˜ํ”ฝ์Šค
    • โš™๏ธ ์—”์ง„
      • ๐Ÿง€ VS
      • ๐Ÿค ์œ ๋‹ˆํ‹ฐ
      • ๐Ÿซ ์–ธ๋ฆฌ์–ผ
      • ๐Ÿน DirectX
      • ๐Ÿฆฅ error
    • ๐Ÿ“ฝ๏ธ ํ”„๋กœ์ ํŠธ
    • ๐Ÿง ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.0
peewoong
[C++] ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.