๊ธ€ ์ž‘์„ฑ์ž: ๋˜ฅํด๋ฒ .
๋ฐ˜์‘ํ˜•

1. ์„ค๋ช…


 const ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์ •์˜ํ•œ ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฆ‰, ์ƒ์ˆ˜ํ™” ๋˜์–ด๋ฒ„๋ฆฌ๋Š”๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ ๋ฐ”๋€Œ๋ฉด ์•ˆ ๋  ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ์œ ์šฉํ•˜๋‹ค.

์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์งˆ ์‹ค์ˆ˜๋กœ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฐ”๋€Œ์–ด ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ๊ฒฝ์šฐ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

2. ์˜ˆ์‹œ


2.1) ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ

const int a = 1;
a = 5; // error!

ํ•œ๋ฒˆ ์„ค์ •๋œ a๋Š” read-only memory์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

2.1) ํ•จ์ˆ˜ ๋‚ด ์ธ์ž๊ฐ’์—์„œ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

class Child
{
public:
	int age;
	string name;
	string address;

	Child() = default;
	Child(int age, string name, string address) :
		age(age), name(name), address(address) { cout << "Child Constructor Call" << endl; }
	void set_age(int age)
	{
		this->age = age;
	}
};

void example(const Child& c)
{
	c.age = 5; // ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅ
	c.set_age(5); // ํ•จ์ˆ˜๋กœ๋„ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅ
}

 

2.3) ํด๋ž˜์Šค ๋‚ด ๋ฉค๋ฒ„ ํ•จ์ˆ˜์—์„œ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

class Child
{
private:
	int age;
	string name;
	string address;

	void set_age(int age)
	{
		this->age = age;
	}

public:
	Child() = default;
	Child(int age, string name, string address) :
		age(age), name(name), address(address) { cout << "Child Constructor Call" << endl; }
	void const_func() const 
	{ 
		age = 5; // ์ปดํŒŒ์ผ ์—๋Ÿฌ! constํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.
		set_age(5); // ์ปดํŒŒ์ผ ์—๋Ÿฌ! constํ•จ์ˆ˜ ๋‚ด์—์„œ const๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†๋‹ค.
	}
};

 

2.4) ์ƒ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

 

int a = 5;
const int* ptrA = &a; // ์ƒ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
// *ptrA = 6; ๋ถˆ๊ฐ€๋Šฅ(ํฌ์ธํ„ฐ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’์ด ์ƒ์ˆ˜์ž„)
ptrA = nullptr; // ๊ฐ€๋Šฅ

 

2.4) ์ƒ์ˆ˜ ํฌ์ธํ„ฐ

int a = 5;
int* const ptrA = &a; // ์ƒ์ˆ˜ ํฌ์ธํ„ฐ
*ptrA = 6; // ๊ฐ€๋Šฅ
//ptrA = nullptr; ๋ถˆ๊ฐ€๋Šฅ, ํฌ์ธํ„ฐ ์ž์ฒด๊ฐ€ ์ƒ์ˆ˜๋‹ค.
๋ฐ˜์‘ํ˜•

'Language > C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++] keyword: explicit  (0) 2020.07.22
[C++] keyword: inline, __inline, __forceinline  (0) 2020.07.22
[C++11] keyword: final  (0) 2020.07.22
[C++11] keyword: override  (0) 2020.07.22
[C++] keyword: virtual  (0) 2020.07.22