๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[๊ฐ์ฒด์ ์ฐธ์กฐ, ๋ณต์ฌ ์์ฑ์] ์ฐธ์กฐ reference ๋ณ์ ๋ณธ๋ฌธ
[๊ฐ์ฒด์ ์ฐธ์กฐ, ๋ณต์ฌ ์์ฑ์] ์ฐธ์กฐ reference ๋ณ์
์ง์ง์ํ์นด 2024. 2. 24. 00:29<ํฉ๊ธฐํ ๋์ ๋ช ํ C++ Programming ์์ ์ ์ฐธ๊ณ ํด์ ์์ฑํ์์ต๋๋ค :-)>
๐ ์ฐธ์กฐ reference
ํฌ์ธํฐ ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ํด * ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ง๋ง
์ฐธ์กฐ ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ํด & ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ค
์ฐธ์กฐ ๋ณ์๋ ์ ์ธ๋ ๋ณ์์ ๋ํ ๋ณ๋ช
(alias)
โ๏ธ ์ฐธ์กฐ ๋ณ์
์ด๋ฏธ ์ ์ธ๋ ๋ณ์ (์๋ณธ ๋ณ์๋ก ์ง์นญ) ์ ๋ํ ๋ณ๋ช
์ฐธ์กฐ์ & ๋ฅผ ์ด์ฉํ์ฌ ์ ์ธํ๋ฉฐ, ์ ์ธ ์ ๋ฐ๋์ ์๋ณธ ๋ณ์๋ก ์ด๊ธฐํ ํด์ผ ํ๋ค
์ฐธ์กฐ ๋ณ์๊ฐ ์ ์ธ๋๋ฉด ์ฐธ์กฐ ๋ณ์ ์ด๋ฆ๋ง ์์ฑ๋๋ฉฐ, ๋ณ๋์ ๊ณต๊ฐ์ด ํ ๋น๋์ง ์๋๋ค
์ฐธ์กฐ ๋ณ์๋ ์ด๊ธฐํ๋ก ์ง์ ๋ ์๋ณธ ๋ณ์์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค
โ๏ธ์ฐธ์กฐ ๋ณ์ ์ฌ์ฉ
์ฐธ์กฐ ๋ณ์๋ ํฌ๋ํฐ๊ฐ ์๋๋ฏ๋ก refn.setRadius(30) ์ด๋ ๊ฒ ํด์ผ ํ๋ค
์ฐธ์กฐ ๋ณ์์ ๋ํ ํฌ์ธํฐ๋ฅผ ๋ง๋ค ์ ์๋ค
int *p = &refn;
โ๏ธ์ฐธ์กฐ ๋ณ์ ์ ์ธ ์ ์ฃผ์ ์ฌํญ
์ด๊ธฐํ๊ฐ ์๋ค๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค
์ฐธ์กฐ์ 7์ ์์น์ ๋ฌด๊ดํ๋ค
์ฐธ์กฐ ๋ณ์์ ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค
์ฐธ์กฐ ๋ณ์์ ๋ํ ์ฐธ์กฐ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค
// ๊ธฐ๋ณธ ํ์
๋ณ์์ ๋ํ ์ฐธ์กฐ
#include <iostream>
using namespace std;
int main()
{
cout << 'i'
<< '\t'
<< 'n'
<< '\t'
<< "refn" << endl;
int i = 1;
int n = 2;
// ์ฐธ์กฐ ๋ณ์ refn ์ ์ธ, refn ์ n ์ ๋ํ ๋ณ๋ช
int &refn = n;
n = 4;
refn++;
cout << i << '\t' << n << '\t' << refn << endl;
refn = i;
refn++;
cout << i << '\t' << n << '\t' << refn << endl;
// ์ฐธ์กฐ์ ๋ํ ํฌ์ธํฐ ๋ณ์ ์ ์ธ
// p ๋ refn ์ ์ฃผ์๋ฅผ ๊ฐ์ง. p ๋ n ์ ์ฃผ์
int *p = &refn;
*p = 20;
cout << i << '\t' << n << '\t' << refn << endl;
}
/*
i n refn
1 5 5
1 2 2
1 20 20
*/
/*
- ์ฐธ์กฐ reference
ํฌ์ธํฐ ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ํด * ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ง๋ง
์ฐธ์กฐ ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ํด & ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ค
์ฐธ์กฐ ๋ณ์๋ ์ ์ธ๋ ๋ณ์์ ๋ํ ๋ณ๋ช
(alias)
- ์ฐธ์กฐ ๋ณ์
์ด๋ฏธ ์ ์ธ๋ ๋ณ์ (์๋ณธ ๋ณ์๋ก ์ง์นญ) ์ ๋ํ ๋ณ๋ช
์ฐธ์กฐ์ & ๋ฅผ ์ด์ฉํ์ฌ ์ ์ธํ๋ฉฐ, ์ ์ธ ์ ๋ฐ๋์ ์๋ณธ ๋ณ์๋ก ์ด๊ธฐํ ํด์ผ ํ๋ค
์ฐธ์กฐ ๋ณ์๊ฐ ์ ์ธ๋๋ฉด ์ฐธ์กฐ ๋ณ์ ์ด๋ฆ๋ง ์์ฑ๋๋ฉฐ, ๋ณ๋์ ๊ณต๊ฐ์ด ํ ๋น๋์ง ์๋๋ค
์ฐธ์กฐ ๋ณ์๋ ์ด๊ธฐํ๋ก ์ง์ ๋ ์๋ณธ ๋ณ์์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค
- ์ฐธ์กฐ ๋ณ์ ์ฌ์ฉ
์ฐธ์กฐ ๋ณ์๋ ํฌ๋ํฐ๊ฐ ์๋๋ฏ๋ก refn.setRadius(30) ์ด๋ ๊ฒ ํด์ผ ํ๋ค
์ฐธ์กฐ ๋ณ์์ ๋ํ ํฌ์ธํฐ๋ฅผ ๋ง๋ค ์ ์๋ค
int *p = &refn;
- ์ฐธ์กฐ ๋ณ์ ์ ์ธ ์ ์ฃผ์ ์ฌํญ
์ด๊ธฐํ๊ฐ ์๋ค๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค
์ฐธ์กฐ์ 7์ ์์น์ ๋ฌด๊ดํ๋ค
์ฐธ์กฐ ๋ณ์์ ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค
์ฐธ์กฐ ๋ณ์์ ๋ํ ์ฐธ์กฐ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค
*/
๐ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ
// ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ
#include <iostream>
using namespace std;
class Circle
{
int radius;
public:
Circle() { radius = 1; }
Circle(int radius) { this->radius = radius; }
void setRadius(int radius) { this->radius = radius; }
double getArea() { return 3.14 * radius * radius; }
};
int main()
{
Circle circle;
// circle ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ๋ณ์ refc ์ ์ธ
Circle &refc = circle;
refc.setRadius(10);
// ๋ ํธ์ถ์ ๋์ผ ๊ฐ์ฒด์ ๋ํ ํธ์ถ
cout << refc.getArea() << " " << circle.getArea();
}
// 314 314