λͺ©λ‘μ 체 κΈ (1099)
KoreanFoodie's Study
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 53 : μ»΄νμΌλ¬ κ²½κ³ λ₯Ό μ§λμΉμ§ λ§μ ν΅μ¬ : 1. μ»΄νμΌλ¬ κ²½κ³ λ₯Ό μ½κ² μ§λμΉμ§ λ§μ. κ²½κ³ λ©μμ§λ₯Ό λ΄μ§ μλ μ½λλ₯Ό μ§μ. 2. μ»΄νμΌλ¬ κ²½κ³ μ λ무 κΈ°λμ§λ λ§μ! μ»΄νμΌλ¬λ§λ€ κ²½κ³ λ©μμ§λ λ¬λΌμ§ μ μλ€! λ€μ μμλ₯Ό 보μ. class B { public: virtual void f() const; }; class D: public B { public: // f λ μ¬μ μΈλ κ²μ΄ μλλΌ, μμ κ°λ¦¬κ³ μμ virtual void f(); }; μ»΄νμΌλ¬λ μ κ²½μ°, "warning: D::f() hides virtual B:..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 52 : μμΉμ§μ new λ₯Ό μμ±νλ€λ©΄ μμΉμ§μ delete λ κ°μ΄ μ€λΉνμ ν΅μ¬ : 1. operator new ν¨μμ μμΉμ§μ (placement) λ²μ μ λ§λ€ λλ, μ΄ ν¨μμ μ§μ μ΄λ£¨λ μμΉμ§μ λ²μ μ operator delete ν¨μλ κΌ λ§λ€μ. μ΄ μΌμ λΉΌλ¨ΉμΌλ©΄, μ°Ύμλ΄κΈ°λ νλ€κ³ μκ²Όλ€κ° μ μκ²Όλ€ νλ λ©λͺ¨λ¦¬ λμΆ νμμ κ²½ννκ² λλ€. 2. new λ° delete μ μμΉμ§μ λ²μ μ μ μΈν λλ, μλν λ°λ μλλ° μ΄λ€μ νμ€ λ²μ μ΄ κ°λ €μ§λ μΌμ΄ μκΈ°μ§ μλλ‘ μ£Όμνμ. μλ μ½λλ₯Ό 보μ. Widget *pW =..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 51 : new λ° delete λ₯Ό μμ±ν λ λ°λΌμΌ ν κΈ°μ‘΄μ κ΄λ‘λ₯Ό μ μμ λμ ν΅μ¬ : 1. κ΄λ‘μ μΌλ‘, operator new ν¨μλ λ©λͺ¨λ¦¬ ν λΉμ λ°λ³΅ν΄μ μλνλ 무ν 루νλ₯Ό κ°μ ΈμΌ νκ³ , λ©λͺ¨λ¦¬ ν λΉ μꡬλ₯Ό λ§μ‘±μν¬ μ μμ λ new μ²λ¦¬μλ₯Ό νΈμΆν΄μΌ νλ©°, 0λ°μ΄νΈμ λν λμ± λ μμ΄μΌ νλ€. ν΄λμ€ μ μ© λ²μ μ μμ μ΄ ν λΉνκΈ°λ‘ μμ λ ν¬κΈ°λ³΄λ€ λ ν°(νλ¦°) λ©λͺ¨λ¦¬ λΈλ‘μ λν μꡬλ μ²λ¦¬ν΄μΌ νλ€. 2. operator delete ν¨μλ λ ν¬μΈν°κ° λ€μ΄μμ λ μ무 μΌλ νμ§ μμμΌ νλ€. ν΄λμ€ μ μ© λ²μ μ ..
μ΄λμ°λμ 'μ΄λμ°μ κ²μμν' μ± μ 보며 μ’μ λ΄μ©μ μ 리νκ³ μμ΅λλ€. λ μμΈν λ΄μ©μ΄ κΆκΈνμλ€λ©΄, μ± μ κ΅¬λ§€ν΄ μ§μ μ½μ΄λ³΄μκΈ°λ₯Ό μΆμ²λ립λλ€! κ·Ήμ’νκ³ μ°λ¦¬λ κΈ°λ³Έμ μΌλ‘ λ°μΉ΄λ₯΄νΈ μ’νκ³λ₯Ό λ§μ΄ μ΄μ©νλλ°, μ¬μ€ νμ μ ν λλ§λ€ x μ y μ λ³νλ₯Ό λ§€λ² κ³μ°νλ κ²μ λ§€μ° λ²κ±°λ‘μ΄ μΌμΌ μ μλ€. μ΄ κ²½μ°, μμ μΌλ‘λΆν°μ 거리 r κ³Ό θ μ λ μμλ‘ κ΅¬μ±λ κ·Ήμ’νκ³(Polar coordinate system) μ μ¬μ©ν μ μλ€. μΌλ°μ μΌλ‘ arctan ν¨μλ₯Ό μ΄μ©νλ©΄ 벑ν°μ κ°λλ₯Ό μ»μ΄λΌ μ μλλ°(tanθ = y/x μ΄λ―λ‘, θ = arctan(y/x) μ΄ λ¨), arctan ν¨μλ μΉμμ΄ -180λμμ 180λκΉμ§ λ°μ λμ§ μλλ€. λ°λΌμ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄, x μ y κ°μ λ°λ‘ μ ..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 50 : new λ° delete λ₯Ό μΈμ λ°κΏμΌ μ’μ μ리λ₯Ό λ€μμ§λ₯Ό νμ ν΄ λμ ν΅μ¬ : κ°λ°μκ° μ€μ€λ‘ μ¬μ©μ μ μ new λ° delete λ₯Ό μμ±νλ λ°λ μ¬λ¬κ°μ§ μ΄μ κ° μλ€. μ¬κΈ°μλ μν μ±λ₯ ν₯μ, ν μ¬μ© μμ μλ¬ λλ²κΉ , ν μ¬μ© μ 보 μμ§ λ±μ λͺ©μ μ΄ ν¬ν¨λλ€. operator new μ operator delete λ₯Ό λ°κΎΈλ κ°μ₯ νν μΈ κ°μ§ μ΄μ λ₯Ό ν λ² λ³΄μ. μλͺ»λ ν μ¬μ©μ νμ§νκΈ° μν΄ : λ°μ΄ν° μ€λ²λ°(overrun) λ° μΈλλ°(underrun) μ νμ§νκΈ° μν΄ νμ§μ© λ°μ΄νΈλ₯Ό μΆκ°λ‘ ν λΉν μ μλ€..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 49 : new μ²λ¦¬μμ λμ μ리λ₯Ό μ λλ‘ μ΄ν΄νμ ν΅μ¬ : 1. set_new_handler ν¨μλ₯Ό μ°λ©΄ λ©λͺ¨λ¦¬ ν λΉ μμ²μ΄ λ§μ‘±λμ§ λͺ»νμ λ νΈμΆλλ ν¨μλ₯Ό μ§μ ν μ μλ€. 2. μμΈλΆκ°(nothrow) new λ μν₯λ ₯μ΄ μ νλμ΄ μλ€. λ©λͺ¨λ¦¬ ν λΉ μ체μλ§ μ μ©λκΈ° λλ¬Έμ΄λ€. μ΄νμ νΈμΆλλ μμ±μμμλ μΌλ§λ μ§ μμΈλ₯Ό λμ§ μ μλ€. λ©λͺ¨λ¦¬ ν λΉμ΄ μ λλ‘ λμ§ λͺ»νμ λ, operator new λ μμΈλ₯Ό λμ§κΈ° μ μ¬μ©μ μͺ½μμ μ§μ ν μ μλ μλ¬ μ²λ¦¬ ν¨μλ₯Ό μ°μ μ μΌλ‘ νΈμΆνλ€. μ΄ ν¨μλ₯Ό new μ²λ¦¬μ(new-ha..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 48 : ν νλ¦Ώ λ©ννλ‘κ·Έλλ°, νμ§ μκ² λκ°? ν΅μ¬ : 1. ν νλ¦Ώ λ©ννλ‘κ·Έλλ°μ κΈ°μ‘΄ μμ μ λ°νμμμ μ»΄νμΌ νμμΌλ‘ μ ννλ ν¨κ³Όλ₯Ό λΈλ€. λ°λΌμ TMP λ₯Ό μ°λ©΄ μ ν μλ¬ νμ§μ λμ λ°νμ ν¨μ¨μ μμ κ±°λ¨Έμ₯ μ μλ€. 2. TMP λ μ μ± μ νμ μ‘°ν©μ κΈ°λ°νμ¬ μ¬μ©μ μ μ μ½λλ₯Ό μμ±νλ λ° μΈ μ μκ³ , νΉμ νμ μ λν΄ λΆμ μ ν μ½λκ° λ§λ€μ΄μ§λ κ²μ λ§λ λ°λ μΈ μ μλ€. ν νλ¦Ώ λ©ννλ‘κ·Έλλ°(template metaprogramming: TMP) λ μ»΄νμΌ λμ€μ μ€νλλ ν νλ¦Ώ κΈ°λ°μ νλ‘κ·Έλ¨μ μμ±νλ μΌμ..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 47 : νμ μ λν μ λ³΄κ° νμνλ€λ©΄ νΉμ±μ 보 ν΄λμ€λ₯Ό μ¬μ©νμ ν΅μ¬ : 1. νΉμ±μ 보 ν΄λμ€λ μ»΄νμΌ λμ€μ μ¬μ©ν μ μλ νμ κ΄λ ¨ μ 보λ₯Ό λ§λ€μ΄λΈλ€. λν νΉμ±μ 보 ν΄λμ€λ ν νλ¦Ώ λ° ν νλ¦Ώ νΉμ λ²μ μ μ¬μ©νμ¬ κ΅¬ννλ€. 2. ν¨μ μ€λ²λ‘λ© κΈ°λ²κ³Ό κ²°ν©νμ¬ νΉμ±μ 보 ν΄λμ€λ₯Ό μ¬μ©νλ©΄, μ»΄νμΌ νμμ κ²°μ λλ νμ λ³ if...else μ κ²λ¬Έμ ꡬμ¬ν μ μλ€. STL μλ container, iterator, algorithm λ§κ³ λ utility λΌκ³ λΆλ¦¬λ ν νλ¦Ώλ λͺ κ° λ€μ΄ μλ€. μ΄λ€ μ€ advance λΌλ, μ§μ λ ..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 46 : νμ λ³νμ΄ λ°λμ§ν κ²½μ°μλ λΉλ©€λ² ν¨μλ₯Ό ν΄λμ€ ν νλ¦Ώ μμ μ μν΄ λμ ν΅μ¬ : λͺ¨λ 맀κ°λ³μμ λν΄ μμμ νμ λ³νμ μ§μνλ ν νλ¦Ώκ³Ό κ΄κ³κ° μλ ν¨μλ₯Ό μ 곡νλ ν΄λμ€ ν νλ¦Ώμ λ§λ€λ €κ³ νλ€λ©΄, μ΄λ° ν¨μλ ν΄λμ€ ν νλ¦Ώ μμ νλ λ ν¨μλ‘μ μ μνλ€ λ€μκ³Ό κ°μ μ 리μ κ³μ° ν΄λμ€κ° μλ€κ³ ν΄ λ³΄μ. template class Rational { public: Rational(const T& numerator = 0, const T& denominator = 1); const T numerator() const;..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 45 : "νΈνλλ λͺ¨λ νμ "μ λ°μλ€μ΄λ λ°λ λ©€λ² ν¨μ ν νλ¦Ώμ΄ μ§λ°©! ν΅μ¬ : 1. νΈνλλ λͺ¨λ νμ μ λ°μλ€μ΄λ λ©€λ² ν¨μλ₯Ό λ§λ€λ €λ©΄ λ©€λ² ν¨μ ν νλ¦Ώμ μ¬μ©νλ€. 2. μΌλ°νλ λ³΅μ¬ μμ± μ°μ°κ³Ό μΌλ°νλ λμ μ°μ°μ μν΄ λ©€λ² ν νλ¦Ώμ μ μΈνλ€ νλλΌλ, 보ν΅μ λ³΅μ¬ μμ±μμ λ³΅μ¬ λμ μ°μ°μλ μ¬μ ν μ§μ μ μΈν΄μΌ νλ€. ν¬μΈν°λ λ€μκ³Ό κ°μ μμμ λ³νμ μ§μνλ€. class Base {}; class Derived: public Base {}; Base *pt1 = new Derived; νμ§λ§ ν νλ¦Ώμ μ΄μ©ν΄μ λ§λ..