π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[ν΄λμ€μ κ°μ²΄] κ°μ²΄ μμ± λ° νμ© λ³Έλ¬Έ
[ν΄λμ€μ κ°μ²΄] κ°μ²΄ μμ± λ° νμ©
μ§μ§μνμΉ΄ 2024. 2. 21. 00:24<ν©κΈ°ν λμ λͺ ν C++ Programming μμ μ μ°Έκ³ ν΄μ μμ±νμμ΅λλ€ :-)>
π Circle ν΄λμ€μ κ°μ²΄ μμ± λ° νμ©
// Circle ν΄λμ€μ΄ κ°μ²΄ μμ± λ° νμ©
#include <iostream>
using namespace std;
class Circle
{
public:
int radius;
double getArea();
};
double Circle::getArea()
{
return 3.14 * radius * radius;
}
int main()
{
// κ°μ²΄ μμ±
Circle donut;
// λ©€λ² λ³μ
donut.radius = 1;
// λ©€λ² ν¨μ
double area = donut.getArea();
cout << "dount λ©΄μ μ " << area << endl;
Circle pizza;
pizza.radius = 30;
area = pizza.getArea();
cout << "pizza λ©΄μ μ " << area << endl;
}
/*
11:53:03 gani@LOVELY-GANI Chapter3 ±|master β|→ g++ -o 3_1 3_1.cpp
11:53:21 gani@LOVELY-GANI Chapter3 ±|master β|→ ./3_1
dount λ©΄μ μ 3.14
pizza λ©΄μ μ 2826
*/
π Rectangle ν΄λμ€ λ§λ€κΈ°
// Rectangle ν΄λμ€ λ§λ€κΈ°
#include <iostream>
using namespace std;
class Rectangle
{
public:
int width;
int height;
int getArea();
};
// Rectangle ν΄λμ€ κ΅¬ν
int Rectangle::getArea()
{
return width * height;
}
int main()
{
// κ°μ²΄ μμ±
Rectangle rect;
// λ©€λ² λ³μ
rect.width = 3;
// λ©€λ² λ³μ
rect.height = 5;
// λ©€λ² ν¨μ
cout << "μ¬κ°νμ λ©΄μ μ " << rect.getArea() << endl;
}
/*
11:58:45 gani@LOVELY-GANI Chapter3 ±|master β|→ g++ -o 3_2 3_2.cpp
11:58:48 gani@LOVELY-GANI Chapter3 ±|master β|→ ./3_2
μ¬κ°νμ λ©΄μ μ 15
*/
π 2κ°μ μμ±μλ₯Ό κ°μ§ Circle ν΄λμ€
// 2κ°μ μμ±μλ₯Ό κ°μ§ Circle ν΄λμ€
#include <iostream>
using namespace std;
class Circle
{
public:
int radius;
// κΈ°λ³Έ μμ±μ
Circle();
Circle(int r);
double getArea();
};
Circle::Circle()
{
// λ°μ§λ¦ κ° μ΄κΈ°ν
radius = 1;
cout << "λ°μ§λ¦ " << radius << " μ μμ±" << endl;
}
Circle::Circle(int r)
{
// λ°μ§λ¦ κ° μ΄κΈ°ν
radius = r;
cout << "λ°μ§λ¦ " << radius << " μ μμ±" << endl;
}
double Circle::getArea()
{
return 3.14 * radius * radius;
}
int main()
{
Circle donut;
double area = donut.getArea();
cout << "donut λ©΄μ μ " << area << endl;
Circle pizza(30);
area = pizza.getArea();
cout << "pizza λ©΄μ μ " << area << endl;
}
/*
μμ±μ : ν΄λμ€λ κ°μ²΄κ° μμ±λ λ μλμΌλ‘ μ€νλλ μμ±μ λΌλ νΉλ³ν λ©€λ² ν¨μλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μ΄κΈ°ν
ν ν΄λμ€μ μ¬λ¬ κ°μ μμ±μλ₯Ό λ μ μμΌλ, μ΄μ€ νλλ§ μ€νλλ€
μμ±μ ν¨μμ μ΄λ¦μ ν΄λμ€ μ΄λ¦κ³Ό λμΌνκ² μμ±
μμ±μ ν¨μμ μνμ λ¦¬ν΄ νμ
μ μΈ X
μμ±μλ μ€λ³΅ κ°λ₯ν¨ (λ§€κ° λ³μ κ°μλ νμ
μ λ€λ₯΄κ²)
λ°μ§λ¦ 1 μ μμ±
donut λ©΄μ μ 3.14
λ°μ§λ¦ 30 μ μμ±
pizza λ©΄μ μ 2826
*/
βοΈ μμ±μ
ν΄λμ€λ κ°μ²΄κ° μμ±λ λ μλμΌλ‘ μ€νλλ μμ±μ λΌλ νΉλ³ν λ©€λ² ν¨μλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μ΄κΈ°ν
ν ν΄λμ€μ μ¬λ¬ κ°μ μμ±μλ₯Ό λ μ μμΌλ, μ΄μ€ νλλ§ μ€νλλ€
μμ±μ ν¨μμ μ΄λ¦μ ν΄λμ€ μ΄λ¦κ³Ό λμΌνκ² μμ±
μμ±μ ν¨μμ μνμ λ¦¬ν΄ νμ
μ μΈ X
μμ±μλ μ€λ³΅ κ°λ₯ν¨ (λ§€κ° λ³μ κ°μλ νμ
μ λ€λ₯΄κ²)
π μμ±μμμ λ€λ₯Έ μμ±μ νΈμΆ μ°μ΅ (μμ μμ±μ λ§λ€κΈ°)
κ°μ²΄ μ΄κΈ°νλ₯Ό μ λ΄νλ νκ² μμ±μμ νκ² μμ±μμ κ°μ²΄ μ΄κΈ°νλ₯Ό μμνλ μμ μμ±μ
// μμ±μμμ λ€λ₯Έ μμ±μ νΈμΆ μ°μ΅ (μμ μμ±μ λ§λ€κΈ°)
#include <iostream>
using namespace std;
class Circle
{
public:
int radius;
// μμ μμ±μ
Circle();
// νκ² μμ±μ
Circle(int r);
double getArea();
};
// μμ μμ±μ (delegating constructor) : μμ±μκ° λ€λ₯Έ μμ±μ νΈμΆ
// μ€λ³΅λ μ΄κΈ°ν μ½λλ₯Ό νλμ μμ±μλ‘ λͺ°κ³ , λ€λ₯Έ μμ±μμκ² μ΄ μμ±μλ₯Ό νΈμΆνκ² ν¨
Circle::Circle() : Circle(1) {}
// νκ² μμ±μ : κ°μ²΄ μ΄κΈ°νλ₯Ό μ λ΄μν΄μΌλ‘μ¨ κ°μ²΄μ μμ± κ³Όμ μ΄ λͺ
λ£ν΄μ§κ³ λ¨μν΄μ§
Circle::Circle(int r)
{
// λ°μ§λ¦ κ° μ΄κΈ°ν
radius = r;
cout << "λ°μ§λ¦ " << radius << " μ μμ±" << endl;
}
double Circle::getArea()
{
return 3.14 * radius * radius;
}
int main()
{
Circle donut;
double area = donut.getArea();
cout << "donut λ©΄μ μ " << area << endl;
Circle pizza(30);
area = pizza.getArea();
cout << "pizza λ©΄μ μ " << area << endl;
}
/*
κ°μ²΄ μ΄κΈ°νλ₯Ό μ λ΄νλ νκ² μμ±μμ νκ² μμ±μμ κ°μ²΄ μ΄κΈ°νλ₯Ό μμνλ μμ μμ±μ
λ°μ§λ¦ 1 μ μμ±
donut λ©΄μ μ 3.14
λ°μ§λ¦ 30 μ μμ±
pizza λ©΄μ μ 2826
*/
π λ©€λ² λ³μ μ΄κΈ°νμ μμ μμ±μ νμ©
μμ±μμ λ©€λ² λ³μμ μ΄κΈ°ν
ν΄λμ€μ λ©€λ² λ³μλ€μ μλμΌλ‘ μ΄κΈ°νλμ§ μκΈ° λλ¬Έμ μμ±μμμ μ΄κΈ°ννλ€
βοΈ 1) μμ±μ μ½λμμ λ©€λ² λ³μ μ΄κΈ°ν
Point::Point()
{
x = 0;
y = 0;
}
Point::Point(int a, int b)
{
x = a;
y = b;
}
βοΈ 2) μμ±μ μλμ μ΄κΉκ°μΌλ‘ μ΄κΈ°ν
Point::Point() : x(0), y(0)
{
}
Point::Point(int a, int b)
{
: x(a), y(b)
}
βοΈ 3) ν΄λμ€ μ μΈλΆμμ μ§μ μ΄κΈ°ν
class Point
{
int x = 0;
int y = 0;
};
// λ©€λ² λ³μ μ΄κΈ°νμ μμ μμ±μ νμ©
#include <iostream>
using namespace std;
class Point
{
int x, y;
public:
Point();
Point(int a, int b);
void show()
{
cout << "(" << x << ", " << y << ")" << endl;
}
};
// μμ μμ±μ
Point::Point() : Point(0, 0) {}
// νκ² μμ±μ
Point::Point(int a, int b) : x(a), y(b) {}
int main()
{
Point origin;
Point target(10, 20);
origin.show();
target.show();
}
/*
(0, 0)
(10, 20)
*/
/*
μμ±μμ λ©€λ² λ³μμ μ΄κΈ°ν
ν΄λμ€μ λ©€λ² λ³μλ€μ μλμΌλ‘ μ΄κΈ°νλμ§ μκΈ° λλ¬Έμ μμ±μμμ μ΄κΈ°ννλ€
1) μμ±μ μ½λμμ λ©€λ² λ³μ μ΄κΈ°ν
Point::Point()
{
x = 0;
y = 0;
}
Point::Point(int a, int b)
{
x = a;
y = b;
}
2) μμ±μ μλμ μ΄κΉκ°μΌλ‘ μ΄κΈ°ν
Point::Point() : x(0), y(0)
{
}
Point::Point(int a, int b)
{
: x(a), y(b)
}
3) ν΄λμ€ μ μΈλΆμμ μ§μ μ΄κΈ°γ
ν
class Point
{
int x = 0;
int y = 0;
};
*/
π ν΄λμ€μ μμ±μκ° κΌ μμ΄μΌ ν κΉ?
κΈ°λ³Έ μμ±μ = λν΄νΈ μμ±μ
ν΄λμ€μ μ μΈλ μ΄λ€ μμ±μλ μμ λ μ»΄νμΌλ¬κ° μλμΌλ‘ μμ±ν΄μ£Όλ μμ±μ
맀κ°λ³μκ° μλ μμ±μ
μμ±μκ° νλλ μλ ν΄λμ€μ κ²½μ° μ»΄νμΌλ¬λ 보μ΄μ§ μκ² κΈ°λ³Έ μμ±μλ₯Ό μ½μ
νλ€
μμ±μκ° νλλΌλ μ μΈλ ν΄λμ€μ κ²½μ°, μ»΄νμΌλ¬λ κΈ°λ³Έ μμ±μλ₯Ό μλ μ½μ
νμ§ μλλ€
#include <iostream>
using namespace std;
class Rectangle
{
public:
int width, height;
// μμ±μ
Rectangle();
Rectangle(int w, int h);
Rectangle(int length);
bool isSquare();
};
Rectangle::Rectangle()
{
width = height = 1;
}
Rectangle::Rectangle(int w, int h)
{
width = w;
height = h;
}
Rectangle::Rectangle(int length)
{
width = height = length;
}
bool Rectangle::isSquare()
{
if (width == height)
{
return true;
}
else
{
return false;
}
}
int main()
{
Rectangle rect1;
Rectangle rect2(3, 5);
Rectangle rect3(3);
if (rect1.isSquare())
cout << "rect1 μ μ μ¬κ°ν!" << endl;
if (rect2.isSquare())
cout << "rect2 μ μ μ¬κ°ν!" << endl;
if (rect3.isSquare())
cout << "rect3 μ μ μ¬κ°ν!" << endl;
}
/*
rect1 μ μ μ¬κ°ν!
rect3 μ μ μ¬κ°ν!
ν΄λμ€μ μμ±μκ° κΌ μμ΄μΌ ν κΉ?
- κΈ°λ³Έ μμ±μ = λν΄νΈ μμ±μ
ν΄λμ€μ μ μΈλ μ΄λ€ μμ±μλ μμ λ μ»΄νμΌλ¬κ° μλμΌλ‘ μμ±ν΄μ£Όλ μμ±μ
맀κ°λ³μκ° μλ μμ±μ
μμ±μκ° νλλ μλ ν΄λμ€μ κ²½μ° μ»΄νμγΉλ¬λ 보μ΄μ§ μκ² κΈ°λ³Έ μμ±μλ₯Ό μ½μ
νλ€
μμ±μκ° νλλΌλ μ μΈλ ν΄λμ€μ κ²½μ°, μ»΄νμΌλ¬λ κΈ°λ³Έ μμ±μλ₯Ό μλ μ½μ
νμ§ μλλ€
*/
πμλ©Έμ(destructor)
κ°μ²΄κ° μλ©Έλλ μμ μμ μλμΌλ‘ νΈμΆλλ ν΄λμ€μ λ©€λ² ν¨μ
μλ©Έμμ λͺ©μ μ κ°μ²΄κ° μ¬λΌμ§ λ νμν λ§λ¬΄λ¦¬ μμ
μ μν¨(λ©λͺ¨λ¦¬ μ΄μ체μ μ λ리거λ νμΌ μ μ₯ λ«κΈ°, λ€νΈμν¬ ν΄μ )
μμ±λ λ°λμμΌλ‘ κ°μ²΄κ° μλ©Έλλ€
μλ©Έμμ μ΄λ¦μ ν΄λμ€ μ΄λ¦ μμ ~μ λΆμΈλ€
μλ©Έμλ λ¦¬ν΄ νμ
μ΄ μμΌλ©° μ΄λ€ κ°λ 리ν΄ν΄μλ μλλ€
μλ©Έμλ μ€μ§ ν κ°λ§ μ‘΄μ¬νλ©° 맀κ°λ³μλ₯Ό κ°μ§μ§ μλλ€
μλ©Έμκ° μ μΈλμ΄ μμ§ μμΌλ©΄ κΈ°λ³Έ μλ©Έμκ° μλμΌλ‘ μμ±λλ€
#include <iostream>
using namespace std;
class Circle
{
public:
int radius;
Circle();
Circle(int r);
~Circle();
double getArea();
};
Circle::Circle()
{
radius = 1;
cout << "λ°μ§λ¦ " << radius << " μ μμ±" << endl;
}
Circle::Circle(int r)
{
radius = r;
cout << "λ°μ§λ¦ " << radius << " μ μμ±" << endl;
}
// μλ©Έμ
Circle::~Circle()
{
cout << "λ°μ§λ¦ " << radius << " μ μλ©Έ" << endl;
}
double Circle::getArea()
{
return 3.14 * radius * radius;
}
int main()
{
Circle donut;
Circle pizza(30);
return 0;
}
/*
λ°μ§λ¦ 1 μ μμ±
λ°μ§λ¦ 30 μ μμ±
λ°μ§λ¦ 30 μ μλ©Έ
λ°μ§λ¦ 1 μ μλ©Έ
μλ©Έμ(destructor)
- κ°μ²΄κ° μλ©Έλλ μμ μμ μλμΌλ‘ νΈμΆλλ ν΄λμ€μ λ©€λ² ν¨μ
- μλ©Έμμ λͺ©μ μ κ°μ²΄κ° μ¬λΌμ§ λ νμν λ§λ¬΄λ¦¬ μμ
μ μν¨(λ©λͺ¨λ¦¬ μ΄μ체μ μ λ리거λ νμΌ μ μ₯ λ«κΈ°, λ€νΈμν¬ ν΄μ )
- μμ±λ λ°λμμΌλ‘ κ°μ²΄κ° μλ©Έλλ€
- μλ©Έμμ μ΄λ¦μ ν΄λμ€ μ΄λ¦ μμ ~μ λΆμΈλ€
- μλ©Έμλ λ¦¬ν΄ νμ
μ΄ μμΌλ©° μ΄λ€ κ°λ 리ν΄ν΄μλ μλλ€
- μλ©Έμλ μ€μ§ ν κ°λ§ μ‘΄μ¬νλ©° 맀κ°λ³μλ₯Ό κ°μ§μ§ μλλ€
- μλ©Έμκ° μ μΈλμ΄ μμ§ μμΌλ©΄ κΈ°λ³Έ μλ©Έμκ° μλμΌλ‘ μμ±λλ€
*/
π μμ±μ/μλ©Έμ μ€ν μμ
- ν¨μ λ΄μμ μ μΈλ κ°μ²΄λ₯Ό μ§μ κ°μ²΄
- ν¨μ λ°κΉ₯μ μ μΈλ κ°μ²΄λ₯Ό μ μ κ°μ²΄
μ§μ κ°μ²΄λ ν¨μκ° μ€νλ λ μμ±λκ³ ν¨μκ° μ’
λ£λ λ μλ©Έλμ§λ§,
μ μ κ°μ²΄λ νλ‘κ·Έλ¨μ΄ λ‘λ©λ λ μμ±λκ³ main() μ΄ μ’
λ£ν λ€ νλ‘κ·Έλ¨ λ©λͺ¨λ¦¬κ° μ¬λΌμ§ λ μλ©Έλλ€
μ μ κ°μ²΄λ μ§μ κ°μ²΄ λͺ¨λ μμ±λ μμμ λ°λμμΌλ‘ μλ©Έλλ€
// μ§μ κ°μ²΄μ μ μ κ°μ²΄μ μμ± λ° μλ©Έ μμ
#include <iostream>
using namespace std;
class Circle
{
public:
int radius;
Circle();
Circle(int r);
~Circle();
double getArea();
};
Circle::Circle()
{
radius = 1;
cout << "λ°μ§λ¦ " << radius << " μ μμ±" << endl;
}
Circle::Circle(int r)
{
radius = r;
cout << "λ°μ§λ¦ " << radius << " μ μμ±" << endl;
}
// μλ©Έμ
Circle::~Circle()
{
cout << "λ°μ§λ¦ " << radius << " μ μλ©Έ" << endl;
}
double Circle::getArea()
{
return 3.14 * radius * radius;
}
// μ μ κ°μ²΄ μμ±
Circle globalDonut(1000);
Circle globalPizza(2000);
// μ§μ κ°μ²΄ μμ±
void f()
{
Circle fDonut(100);
Circle fPizza(200);
}
int main()
{
// μ§μ κ°μ²΄ μμ±
Circle mainDonut;
Circle mainPizza(30);
f();
}
/*
λ°μ§λ¦ 1000 μ μμ±
λ°μ§λ¦ 2000 μ μμ±
λ°μ§λ¦ 1 μ μμ±
λ°μ§λ¦ 30 μ μμ±
λ°μ§λ¦ 100 μ μμ±
λ°μ§λ¦ 200 μ μμ±
λ°μ§λ¦ 200 μ μλ©Έ
λ°μ§λ¦ 100 μ μλ©Έ
λ°μ§λ¦ 30 μ μλ©Έ
λ°μ§λ¦ 1 μ μλ©Έ
λ°μ§λ¦ 2000 μ μλ©Έ
λ°μ§λ¦ 1000 μ μλ©Έ
μμ±μ/μλ©Έμ μ€ν μμ
- ν¨μ λ΄μμ μ μΈλ κ°μ²΄λ₯Ό μ§μ κ°μ²΄
- ν¨μ λ°κΉ₯μ μ μΈλ κ°μ²΄λ₯Ό μ μ κ°μ²΄
μ§μ κ°μ²΄λ ν¨μκ° μ€νλ λ μμ±λκ³ ν¨μκ° μ’
λ£λ λ μλ©Έλμ§λ§,
μ μ κ°μ²΄λ νλ‘κ·Έλ¨μ΄ λ‘λ©λ λ μμ±λκ³ main() μ΄ μ’
λ£ν λ€ νλ‘κ·Έλ¨ λ©λͺ¨λ¦¬κ° μ¬λΌμ§ λ μλ©Έλλ€
μ μ κ°μ²΄λ μ§μ κ°μ²΄ λͺ¨λ μμ±λ μμμ λ°λμμΌλ‘ μλ©Έλλ€
*/
π μ»΄νμΌ μ€λ₯κ° λ°μνλ κ³³ (μμ±μλ₯Ό publicμΌλ‘ ν΄μΌνλ€!)
βοΈ μ κ·Ό μ§μ μ
κ°μ²΄λ₯Ό μΊ‘μννκ³ , μΈλΆμμ μ κ·Ό κ°λ₯ν κ³΅κ° λ©€λ²μ μΈλΆμ μ κ·Όμ νμ©νμ§ μλ λΉκ³΅κ° λ©€λ²λ₯Ό ꡬλΆνλ€
λν΄νΈ μ κ·Ό μ§μ μ private (μΊ‘μνμ κΈ°λ³Έ μμΉμ΄ λΉκ³΅κ°μ΄κΈ° λλ¬Έ)
- private λ©€λ²
ν΄λμ€ λ΄μ λ©€λ² ν¨μλ€μκ²λ§ μ κ·Όμ΄ νμ©νμ§
- public λ©€λ²
ν΄λμ€ λ΄μΈλ₯Ό λ§λ‘ νκ³ νλ‘κ·Έλ¨μ λͺ¨λ ν¨μλ€μκ² μ κ·Όμ΄ νμ©
- protected λ©€λ²
ν΄λμ€ λ΄μ λ©€λ² ν¨μμ μ΄ ν΄λμ€λ₯Ό μμλ°μ νμ ν΄λμ€μ λ©€λ² ν¨μμκ²λ§ μ κ·Όμ΄ νμ©λ¨
βοΈ λ©€λ² λ³΄νΈμ μμ±μ
λ©€λ² λ³μλ privateλ‘ μ§μ νλ κ²μ΄ λ°λμ§ν¨
ν΄λμ€ μΈλΆμμ κ°μ²΄λ₯Ό μμ±νκΈ° μν΄μλ μμ±μλ publicμΌλ‘ μ μΈν΄μΌ νλ€ (κ·Έλ μ§ μμΌλ©΄ μ»΄νμΌ μ€λ₯)
BUT, μΈλΆμμ κ°μ²΄λ₯Ό μμ±ν μ μλλ‘ μμ±μλ₯Ό private μΌλ‘ μ μΈνκΈ°λ νκ³ ,
μμ ν΄λμ€μμλ§ μμ±μλ₯Ό νΈμΆνλλ‘ protected λ‘ μ μΈνκΈ°λ νλ€
// μ»΄νμΌ μ€λ₯κ° λ°μνλ κ³³ (μμ±μλ₯Ό publicμΌλ‘ ν΄μΌνλ€!)
#include <iostream>
using namespace std;
class PrivateAccessError
{
private:
int a;
void f();
PrivateAccessError();
public:
int b;
PrivateAccessError(int x);
void g();
};
PrivateAccessError::PrivateAccessError()
{
a = 1;
b = 1;
}
PrivateAccessError::PrivateAccessError(int x)
{
a = x;
b = x;
}
void PrivateAccessError::f()
{
a = 5;
b = 5;
}
void PrivateAccessError::g()
{
a = 6;
b = 6;
}
int main()
{
// PrivateAccessError()λ private μ΄λ―λ‘ main() μμ νΈμΆν μ μμ!!!!
PrivateAccessError objA;
PrivateAccessError objB(100);
// aλ PrivateAccessError ν΄λμ€μ private λ©€λ²μ΄λ―λ‘ main() μμ νΈμΆν μ μμ!!!!
objB.a = 10;
objB.b = 20;
// f() λ PrivateAccessError ν΄λμ€μ private λ©€λ²μ΄λ―λ‘ main() μμ νΈμΆν μ μμ!!!!
objB.f();
objB.g();
}
/*
- μ κ·Ό μ§μ μ
κ°μ²΄λ₯Ό μΊ‘μννκ³ , μΈλΆμμ μ κ·Ό κ°λ₯ν κ³΅κ° λ©€λ²μ μΈλΆμ μ κ·Όμ νμ©νμ§ μλ λΉκ³΅κ° λ©€λ²λ₯Ό ꡬλΆνλ€
λν΄νΈ μ κ·Ό μ§μ μ private (μΊ‘μνμ κΈ°λ³Έ μμΉμ΄ λΉκ³΅κ°μ΄κΈ° λλ¬Έ)
- private λ©€λ²
ν΄λμ€ λ΄μ λ©€λ² ν¨μλ€μκ²λ§ μ κ·Όμ΄ νμ©νμ§
- public λ©€λ²
ν΄λμ€ λ΄μΈλ₯Ό λ§λ‘ νκ³ νλ‘κ·Έλ¨μ λͺ¨λ ν¨μλ€μκ² μ κ·Όμ΄ νμ©
- protected λ©€λ²
ν΄λμ€ λ΄μ λ©€λ² ν¨μμ μ΄ ν΄λμ€λ₯Ό μμλ°μ νμ ν΄λμ€μ λ©€λ² ν¨μμκ²λ§ μ κ·Όμ΄ νμ©λ¨
- λ©€λ² λ³΄νΈμ μμ±μ
λ©€λ² λ³μλ privateλ‘ μ§μ νλ κ²μ΄ λ°λμ§ν¨
ν΄λμ€ μΈλΆμμ κ°μ²΄λ₯Ό μμ±νκΈ° μν΄μλ μμ±μλ publicμΌλ‘ μ μΈν΄μΌ νλ€ (κ·Έλ μ§ μμΌλ©΄ μ»΄νμΌ μ€λ₯)
BUT, μΈλΆμμ κ°μ²΄λ₯Ό μμ±ν μ μλλ‘ μμ±μλ₯Ό private μΌλ‘ μ μΈνκΈ°λ νκ³ ,
μμ ν΄λμ€μμλ§ μμ±μλ₯Ό νΈμΆνλλ‘ protected λ‘ μ μΈνκΈ°λ νλ€
*/
π ν¨μ νΈμΆμ λ°λ₯Έ μκ° μ€λ²ν€λ
μκ°μ 무μν μ μλ λΉμ€μ μ°¨μ§νλ κ²½μ°κ° μλ€
짧μ μ½λλ‘ ν¨μλ₯Ό λ§λ€λ©΄, ν¨μ νΈμΆμ μ€λ²ν€λκ° μλμ μΌλ‘ 컀μ νλ‘κ·Έλ¨ μ€ν μκ°μ΄ κΈΈμ΄μ§λ γ
γ΄μΈμ΄ λλ€
βοΈ μΈλΌμΈ ν¨μ
짧μ μ½λλ‘ κ΅¬μ±λλ ν¨μμ λν΄, ν¨μ νΈμΆ μ€λ²ν€λλ‘ μΈν νλ‘κ·Έλ¨μ μ€ν μλ μ νλ₯Ό λ§κΈ° μν΄ λμ
λ κΈ°λ₯
ν¨μ μμ inline ν€μλλ₯Ό μ΄μ©νλ€
μ»΄νμΌλ¬λ μΈλΌμΈ ν¨μλ₯Ό νΈμΆνλ κ³³μ μΈλΌμΈ ν¨μμ μ½λλ₯Ό κ·Έλλ‘ μ½μ
νμ¬ ν¨μ νΈμΆμ΄ μΌμ΄λμ§ μκ² νλ€
λ©€λ² λ³μμ κ°μ μμλ΄κ³ λ©€λ² λ³μμ κ°μ μ°λ μ΄λ₯Έλ° getter/setter λΌλ μμ λ©€λ² ν¨μλ€μ΄ λ§μ΄ μ‘΄μ¬νλ€
μΈλΌμΈ ν¨μλ₯Ό νΈμΆνλ κ³³μ μΈλΌμΈ ν¨μμ μ½λλ₯Ό λ¨μ μ½μ
νλ―λ‘ νΈμΆνλ κ³³μ΄ μ¬λ¬ κ΅°λ° μμΌλ©΄ κ·Έλ§νΌ μ 체 ν¬κΈ°κ° λμ΄λλ λ¨μ
βοΈ λ©€λ² ν¨μμ μΈλΌμΈ μ μΈκ³Ό μλ μΈλΌμΈ
μμ±μλ₯Ό ν¬ν¨νμ¬ ν΄λμ€μ λͺ¨λ λ©€λ² ν¨μκ° μΈλΌμΈμΌλ‘ μ μΈλ μ μλ€
λ©€λ² ν¨μμ ν¬κΈ°κ° μμ κ²½μ°, ν΄λμ€μ μ μΈλΆμ μ§μ ꡬννμ¬λ 무방νλ€
μ»΄νμΌλ¬λ ν΄λμ€μ μ μΈλΆμ ꡬνλ λ©€λ² ν¨μλ€μ λν΄μ inline μ μΈμ΄ μμ΄λ μΈλΌμΈ ν¨μλ‘ μλ μ²λ¦¬νλ€
βοΈ C++ ꡬ쑰체
ꡬ쑰체 STRUCT λ₯Ό μ§μνλ€
ν΄λμ€μ λμΌν ꡬ쑰μ κΈ°λ₯μ κ°μ§λ€
struct ν€μλλ₯Ό μ μΈνλ©°, λ©€λ² λ³μμ λ©€λ² ν¨μλ₯Ό κ°μ§κ³ , μ κ·Ό μ§μ λ ν΄μΌ νλ€
βοΈ C++ ꡬ쑰체μ κ°μ²΄ μμ±
ꡬ쑰체 νμ
λ€μ κ°μ²΄ μ΄λ¦μ μ§μ νλ©΄ λλ€
κ°μ²΄ μμ± μ struct ν€μλλ μ¬μ©νμ§ μλλ€
βοΈ κ΅¬μ‘°μ²΄μ ν΄λμ€μ μ°¨μ΄μ
λ©€λ² λ³μλΏλ§ μλλΌ μμ±μμ μλ©Έμ λΉλ‘―ν λ©€λ² ν¨μλ₯Ό κ°μ§ μ μλ€
λ€λ₯Έ ꡬ쑰체λ ν΄λμ€μκ² μμ κ°λ₯νκ³ λ€λ₯Έ ꡬ쑰체λ ν΄λμ€λ₯Ό μμλ°μ μ μλ€
λ©€λ²λ€μ μ κ·Ό μ§μ μλ‘ μ§μ λλ©° λ©€λ² νμ©λ ν΄λμ€μ λμΌνλ€
ν΄λμ€μ λν΄νΈ μ κ·Ό μ§μ μ΄ private λ°λ©΄ ꡬ쑰체λ public μ΄λ€
// Circle ν΄λμ€λ₯Ό C++ ν΄λμ€λ₯Ό μ΄μ©νμ¬ μ¬μμ±
#include <iostream>
using namespace std;
// ꡬ쑰체 μ μΈ
struct StructCircle
{
private:
int radius;
public:
// ꡬ쑰체μ μμ±μ
StructCircle(int r) { radius = r; }
double getArea();
};
double StructCircle::getArea()
{
return 3.14 * radius * radius;
}
int main()
{
StructCircle waffle(3);
cout << "λ©΄μ μ " << waffle.getArea();
}
/*
λ©΄μ μ 28.26
- ν¨μ νΈμΆμ λ°λ₯Έ μκ° μ€λ²ν€λ
μκ°μ 무μν μ μλ λΉμ€μ μ°¨μ§νλ κ²½μ°κ° μλ€
짧μ μ½λλ‘ ν¨μλ₯Ό λ§λ€λ©΄, ν¨μ νΈμΆμ μ€λ²ν€λκ° μλμ μΌλ‘ 컀μ νλ‘κ·Έλ¨ μ€ν μκ°μ΄ κΈΈμ΄μ§λ γ
γ΄μΈμ΄ λλ€
- μΈλΌμΈ ν¨μ
짧μ μ½λλ‘ κ΅¬μ±λλ ν¨μμ λν΄, ν¨μ νΈμΆ μ€λ²ν€λλ‘ μΈν νλ‘κ·Έλ¨μ μ€ν μλ μ νλ₯Ό λ§κΈ° μν΄ λμ
λ κΈ°λ₯
ν¨μ μμ inline ν€μλλ₯Ό μ΄μ©νλ€
μ»΄νμΌλ¬λ μΈλΌμΈ ν¨μλ₯Ό νΈμΆνλ κ³³μ μΈλΌμΈ ν¨μμ μ½λλ₯Ό κ·Έλλ‘ μ½μ
νμ¬ ν¨μ νΈμΆμ΄ μΌμ΄λμ§ μκ² νλ€
λ©€λ² λ³μμ κ°μ μμλ΄κ³ λ©€λ² λ³μμ κ°μ μ°λ μ΄λ₯Έλ° getter/setter λΌλ μμ λ©€λ² ν¨μλ€μ΄ λ§μ΄ μ‘΄μ¬νλ€
μΈλΌμΈ ν¨μλ₯Ό νΈμΆνλ κ³³μ μΈλΌμΈ ν¨μμ μ½λλ₯Ό λ¨μ μ½μ
νλ―λ‘ νΈμΆνλ κ³³μ΄ μ¬λ¬ κ΅°λ° μμΌλ©΄ κ·Έλ§νΌ μ 체 ν¬κΈ°κ° λμ΄λλ λ¨μ
- λ©€λ² ν¨μμ μΈλΌμΈ μ μΈκ³Ό μλ μΈλΌμΈ
μμ±μλ₯Ό ν¬ν¨νμ¬ ν΄λμ€μ λͺ¨λ λ©€λ² ν¨μκ° μΈλΌμΈμΌλ‘ μ μΈλ μ μλ€
λ©€λ² ν¨μμ ν¬κΈ°κ° μμ κ²½μ°, ν΄λμ€μ μ μΈλΆμ μ§μ ꡬννμ¬λ 무방νλ€
μ»΄νμΌλ¬λ ν΄λμ€μ μ μΈλΆμ ꡬνλ λ©€λ² ν¨μλ€μ λν΄μ inline μ μΈμ΄ μμ΄λ μΈλΌμΈ ν¨μλ‘ μλ μ²λ¦¬νλ€
- C++ ꡬ쑰체
ꡬ쑰체 STRUCT λ₯Ό μ§μνλ€
ν΄λμ€μ λμΌν ꡬ쑰μ κΈ°λ₯μ κ°μ§λ€
struct ν€μλλ₯Ό μ μΈνλ©°, λ©€λ² λ³μμ λ©€λ² ν¨μλ₯Ό κ°μ§κ³ , μ κ·Ό μ§μ λ ν΄μΌ νλ€
- C++ ꡬ쑰체μ κ°μ²΄ μμ±
ꡬ쑰체 νμ
λ€μ κ°μ²΄ μ΄λ¦μ μ§μ νλ©΄ λλ€
κ°μ²΄ μμγ
μ struct ν€μλλ μ¬μ©νμ§ μλλ€
- ꡬ쑰체μ ν΄λμ€μ μ°¨μ΄μ
λ©€λ² λ³μλΏλ§ μλλΌ μμ±μμ μλ©Έμ λΉλ‘―ν λ©€λ² ν¨μλ₯Ό κ°μ§ μ μλ€
λ€λ₯Έ ꡬ쑰체λ ν΄λμ€μκ² μμ κ°λ₯νκ³ λ€λ₯Έ ꡬ쑰체λ ν΄λμ€λ₯Ό μμλ°μ μ μλ€
λ©€λ²λ€μ μ κ·Ό μ§μ μλ‘ μ§μ λλ©° λ©€λ² νμ©λ ν΄λμ€μ λμΌνλ€
ν΄λμ€μ λν΄νΈ μ κ·Ό μ§μ μ΄ private λ°λ©΄ ꡬ쑰체λ public μ΄λ€
*/