00. μ©μ΄ μ 리
- μ μΈ
declaration
- μ½λμ μ¬μ©λλ λμμ μ΄λ¦κ³Ό νμ μ μ»΄νμΌλ¬μκ² μλ €μ£Όλ κ²
- signature
- ν¨μμ λ§€κ°λ³μ 리μ€νΈμ λ°ν νμ
std::size_t num(int number); //signature: std::size_t(int)
- μ μ
definition
- ꡬνλΆλ₯Ό μ»΄νμΌλ¬μκ² μλ €μ£Όλ κ²
- explicit
- μμ±μκ° μμμ μΈ νμ λ³νμ΄ μλ¨
class C {
public:
explicit C(int x);
};
μμμΉ λͺ»ν νμ λ³νμ λ§μμ€λ€.
- 볡μ¬μμ±μ
copy constructor
- μ΄λ€ κ°μ²΄λ₯Ό μ΄κΈ°ννκΈ° μν΄ κ°μ νμ μ κ°μ²΄λ₯Ό νΈμΆν¨
class Widget {
public:
Widget(const Widget& w);
};
Widget w1;
Widget w2(w1);
- λ³΅μ¬ λμ
μ°μ°μ
copy assignment operator
- κ°μ νμ μ λ€λ₯Έ κ°μ²΄μ μ΄λ€ κ°μ²΄μ κ°μ 볡μ¬ν¨
class Widget {
public:
Widget& operator=(const Widget& w);
};
Widget w1;
Widget w2(w1);
w1=w2; //λ³΅μ¬ λμ
μ°μ°μ
Widget w3=w2; //λ³΅μ¬ μμ±μ
κ°μ μν κ°μ²΄ μ λ¬
- w2κ° wλ‘ λ³΅μ¬ μμ±λ κ²μ
bool func(Widget w);
...
Widget w2;
if (isEnable(w2)) {
...
}
- λ―Έμ μ λμ
undefined behavior
- runtimeμ μ΄λ€ νμμ΄ ν°μ§μ§ νμ€ν μμΈ‘ν μ μμ
int *p = 0; //nullptr
std::cout << *p; //λ―Έμ μ λμ
char name[] = "Larvine"; //ν¬κΈ°κ° 8μΈ λ°°μ΄
char c = name[10]; //λ―Έμ μ λμ
- interface
- ν¨μμ signature, μ΄λ€ ν΄λμ€μ μ κ·Όκ°λ₯μμ(public interface, protected interface, private interface λ±), templateμ νμ λ§€κ°λ³μ μ¦, μ§κ·Ήν νλ²νκ³ μΌλ°μ μΈ μ€κ³ μμ΄λμ΄λ‘μμ μΈν°νμ΄μ€
- μ¬μ©μ
client
- μ½λλ₯Ό μ¬μ©νλ λͺ¨λ μ΄
- ctor, dtor
- μ½λ μ£Όμλ¬Έμμ μμ±μ, μλ©Έμλ₯Ό μΈκΈν λ μ¬μ©
01. μ΄λ¦μ§κΈ°μ λν κ·μ½
- lhs, rhs
- μ’λ³, μ°λ³
- pt
- νμ Tμ λν ν¬μΈν°
Widget *pw; // Widgetμ λν ν¬μΈν°
- rt
- νμ Tμ λν μ°Έμ‘°μ
Widget& rw; //Widgetμ λν μ°Έμ‘°μ
- mf
- λ©€λ²ν¨μ
02. μ€λ λ©μ λν κ³ λ €μ¬ν
c++μμλ threadμ λν κ°λ μμ²΄κ° μμ§λ§ νμ€μμλ κ·Έλ μ§ μμΌλ―λ‘ λ κ°κ²©μ μ€μ΄κ³ μ λ Έλ ₯νλ€.