โ๏ธconst = ๋ณ์๋ฅผ ์์ํ ์ํจ๋ค (๋ณํ์ง ๋ชปํ๊ฒ ๋ง๋ ๋ค)
๐ฉ const int * ptr = &a
์์์ ๋ํ ํฌ์ธํฐ, ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ ์์ํ
๊ฐ ๋ณ๊ฒฝX ์ฃผ์ ๋ณ๊ฒฝO
๊ฐ๋ฆฌํค๋ ์๋ณธ ๋ณ์ ์์ฒด๋ฅผ ์์ํX (์์ ์ทจ๊ธ)
๐ฉ int * const ptr = &a
์์ ํฌ์ธํฐ, ํฌ์ธํฐ ์์ฒด๋ฅผ ์์ํ
๊ฐ ๋ณ๊ฒฝO ์ฃผ์ ๋ณ๊ฒฝX
๐ฉ const int * const ptr = &a
์์์ ๋ํ ์์ ํฌ์ธํฐ
๊ฐ ๋ณ๊ฒฝX ์ฃผ์ ๋ณ๊ฒฝX
๐ ๊ฐ ๋ณ๊ฒฝ *ptr = 1;
๐ ์ฃผ์ ๋ณ๊ฒฝ ptr = &b;
๐ฉ const๋ก ์ ์ธ๋ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก const๋ก ์ ์ธ๋์ง ์์ ๋ฉค๋ฒํจ์์ ํธ์ถ์ ๋ถ๊ฐ๋ฅ
ํจ์์ const ์ ์ธ ์ ๋ฌด๋ ํจ์ ์ค๋ฒ๋ก๋ฉ์ ์กฐ๊ฑด์ด ๋๋ค.
const int a;
void Func(){}
void Func() const{}
โ๏ธnew & delete
๐ฉ ๋ฉ๋ชจ๋ฆฌ ๋์ ํ ๋น๋ฐฉ๋ฒ
ํฌ๊ธฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๊ณ์ฐํ๋ ์ผ์ ํ์ง ์์๋ ๋๋ค.
int *ptr1 = new int; // intํ ๋ณ์ ํ ๋น
double *ptr2 = new double // doubleํ ๋ณ์ ํ ๋น
int *arr1 = new int[3]; // ๊ธธ์ด๊ฐ 3์ธ intํ ๋ฐฐ์ด ํ ๋น
douible *arr2 = new double[7]; // ๊ธธ์ด๊ฐ 7์ธ doubleํ ๋ฐฐ์ด ํ ๋น
๐ฉ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฐฉ๋ฒ
new ์ฐ์ฐ์๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ๋์ delete ํจ์ ํธ์ถ์ ํตํด์ ์๋ฉธํด์ผ ํ๋ค.
delete ptr1;
delete ptr2;
delete []arr1;
delete []arr2;
๋ณ์์ ์ฑํฅ์ ์ง๋๋(๊ฐ์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ) ๋์์ ๋ํด์๋ ์ฐธ์กฐ์์ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
ํ ์์ญ์ ์ ๊ทผํ ๋, ํฌ์ธํฐ, ์ฐธ์กฐ์๋ฅผ ์ด์ฉํ ์ ์๋ค.
int *ptr = new int;
int &ref = *ptr; // ํ ์์ญ์ ํ ๋น๋ ๋ณ์์ ๋ํ ์ฐธ์กฐ์ ์ ์ธ
ref = 20;
cout << *ptr << endl;
โ๏ธ friend
private ๋ฉค๋ฒ์ ์ ๊ทผ์ ํ์ฉํ๋ค๋ ์ ์ธ
๐ ์ ๋ณด ์๋์ ๋ฐํ๋ ์ ์ธ์ด๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ ํ์ ์ผ๋ก ์ฌ์ฉ
๐ฉ ํด๋์ค์ friend ์ ์ธ
class Boy{
private:
int height;
friend class Girl; // Girl ํด๋์ค์ ๋ํ friend ์ ์ธ
public:
Boy(int len) : height(len){
}
};
class Girl{
private:
char name[20];
public:
Girl(char *num){
strcpy(name, num);
}
void ShowYourFriendInfo(Boy &frn){
cout << "His height : " << frn.height << endl;
// Girl์ด Boy์ friend๋ก ์ ์ธ๋์์ผ๋ฏ๋ก, private ๋ฉค๋ฒ์ ์ง์ ์ ๊ทผ ๊ฐ๋ฅ
}
}
๐ฉ ํจ์์ friend ์ ์ธ
set_name ํจ์์์๋ Friend1 ํด๋์ค์ private ๋ฉค๋ฒ์ธ name ๋ณ์์ ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
class Friend1 {
private :
string name;
friend void set_name(Friend1&, string);
};
void set_name(Friend1& f, string s) {
f.name = s;
cout << f.name << "\n";
}
int main(void) {
Friend1 f1;
set_name(f1, "aa");
return 0;
}
โ๏ธ static
์ ์ญ๋ณ์์ ์ ์ธ๋ static
๐ ์ ์ธ๋ ํ์ผ ๋ด์์๋ง ์ฐธ์กฐ๋ฅผ ํ์ฉํ๊ฒ ๋ค๋ ์๋ฏธ
ํจ์ ๋ด์ ์ ์ธ๋ static์ ์๋ฏธ
๐ ํ๋ฒ๋ง ์ด๊ธฐํ๋๊ณ , ์ง์ญ๋ณ์์ ๋ฌ๋ฆฌ ํจ์๋ฅผ ๋น ์ ธ๋๊ฐ๋ ์๋ฉธ๋์ง ์๋๋ค.
void Counter() {
static int cnt;
cnt++;
cout << "Current cnt: "<< cnt << endl;
}
int main(void) {
for(int i = 0; i < 10; ++i){
Counter();
}
return 0;
}
๐ฉ static ๋ฉค๋ฒ๋ณ์
static ๋ณ์๋ ๊ฐ์ฒด๋ณ๋ก ์กด์ฌํ๋ ๋ณ์๊ฐ ์๋, ํ๋ก๊ทธ๋จ ์ ์ฒด ์์ญ์์ ํ๋๋ง ์กด์ฌํ๋ ๋ณ์์ด๋ค.
ํ๋ก๊ทธ๋จ ์คํ๊ณผ ๋์์ ์ด๊ธฐํ๋์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋๋ค.
class SoSimple{
private:
static int simObjCnt; // static ๋ฉค๋ฒ ๋ณ์, ํด๋์ค ๋ณ์
public:
SoSimple(){
simObjCnt++;
cout << simObjCnt << "๋ฒ์งธ SoSimple ๊ฐ์ฒด" << endl;
}
};
int SoSimple::simObjCnt=0; // static ๋ฉค๋ฒ๋ณ์์ ์ด๊ธฐํ
static ๋ณ์๊ฐ ์ ์ธ๋ ์ธ๋ถ์์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ ค๋ฉด, ํด๋น ๋ณ์๊ฐ public์ผ๋ก ์ ์ธ๋์ด์ผ ํ๋ค.
class SoSimple{
public:
static int simObjCnt;
public:
SoSimple(){
simObjCnt++; // ์ ๊ทผ ์ผ์ด์ค1
}
};
int SoSimple::simObjCnt=0;
int main(void){
cout << SoSimple::simObjCnt << "๋ฒ์งธ SoSimple ๊ฐ์ฒด" << endl;
SoSimple sim1;
SoSimple sim2;
cout << SoSimple::simObjCnt << "๋ฒ์งธ SoSimple ๊ฐ์ฒด" << endl; // ์ ๊ทผ ์ผ์ด์ค2
cout << sim1.simObjCnt << "๋ฒ์งธ SoSimple ๊ฐ์ฒด" << endl;
cout << sim2.simObjCnt << "๋ฒ์งธ SoSimple ๊ฐ์ฒด" << endl; // ์ ๊ทผ ์ผ์ด์ค3
}
๐ฉ static ๋ฉค๋ฒ ํจ์
static ๋ฉค๋ฒ ๋ณ์์ ํน์ง์ด ์ผ์นํ๋ค.
1. ์ ์ธ๋ ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ๋ค.
2. public์ผ๋ก ์ ์ธ์ด ๋๋ฉด, ํด๋์ค์ ์ด๋ฆ์ ์ด์ฉํด์ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
3. ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ก ์กด์ฌํ๋ ๊ฒ์ด ์๋๋ค.
static ํจ์๋ ๊ฐ์ฒด ๋ด์ ์กด์ฌํ๋ ํจ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ฉค๋ฒ๋ณ์๋ ๋ฉค๋ฒํจ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค.
static ํจ์๋ static ๋ณ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ณ , static ํจ์๋ง ํธ์ถ ๊ฐ๋ฅํ๋ค.
๐ฉ const static
const static ๋ฉค๋ฒ๋ณ์๋ ํด๋์ค๊ฐ ์ ์๋ ๋, ์ง์ ๋ ๊ฐ์ด ์ ์ง๋๋ ์์์ด๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ฌธ๋ฒ์ผ๋ก ์ ์ํ๊ณ ์๋ค.
class A{
public:
const static int RUSSIA = 1707540;
}
int main(void){
cout << "๋ฌ์์ ๋ฉด์ : " << A.RUSSIA << "km << endl;
}
๐ mutable
mutable๋ก ์ ์ธ๋ ๋ฉค๋ฒ๋ณ์๋ const ํจ์ ๋ด์์ ๊ฐ์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
class SoSimple{
private:
int num1;
mutable int num2;
public:
SoSimple(int n1, int n2) : num1(n1), num2(n2) {}
void CopyToNum2() const {
num2 - num1;
}
}
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ์ฐธ์กฐ์(Reference) (0) | 2024.04.17 |
---|---|
[C++] ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ | C++ ํ์ค ํค๋ (0) | 2024.04.17 |
[C++] ์ด๋ฆ๊ณต๊ฐ(namespace) | ๋ฒ์์ง์ ์ฐ์ฐ์ (0) | 2024.04.14 |
[C++] inline ํจ์ cf. ๋งคํฌ๋ก ํจ์ (0) | 2024.04.14 |
[C++] ํจ์ ์ค๋ฒ๋ก๋ฉ | ๋งค๊ฐ๋ณ์์ ๋ํดํธ ๊ฐ (0) | 2024.04.14 |