[E-Z] cpp00

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에 λŒ€ν•œ κ°œλ… μžμ²΄κ°€ μ—†μ§€λ§Œ ν˜„μ‹€μ—μ„œλŠ” κ·Έλ ‡μ§€ μ•ŠμœΌλ―€λ‘œ 두 간격을 μ€„μ΄κ³ μž λ…Έλ ₯ν•œλ‹€.