λͺ©λ‘μ 체 κΈ (1110)
KoreanFoodie's Study
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 45 : "νΈνλλ λͺ¨λ νμ "μ λ°μλ€μ΄λ λ°λ λ©€λ² ν¨μ ν νλ¦Ώμ΄ μ§λ°©! ν΅μ¬ : 1. νΈνλλ λͺ¨λ νμ μ λ°μλ€μ΄λ λ©€λ² ν¨μλ₯Ό λ§λ€λ €λ©΄ λ©€λ² ν¨μ ν νλ¦Ώμ μ¬μ©νλ€. 2. μΌλ°νλ λ³΅μ¬ μμ± μ°μ°κ³Ό μΌλ°νλ λμ μ°μ°μ μν΄ λ©€λ² ν νλ¦Ώμ μ μΈνλ€ νλλΌλ, 보ν΅μ λ³΅μ¬ μμ±μμ λ³΅μ¬ λμ μ°μ°μλ μ¬μ ν μ§μ μ μΈν΄μΌ νλ€. ν¬μΈν°λ λ€μκ³Ό κ°μ μμμ λ³νμ μ§μνλ€. class Base {}; class Derived: public Base {}; Base *pt1 = new Derived; νμ§λ§ ν νλ¦Ώμ μ΄μ©ν΄μ λ§λ..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 44 : λ§€κ°λ³μμ λ 립μ μΈ μ½λλ ν νλ¦ΏμΌλ‘λΆν° λΆλ¦¬μν€μ ν΅μ¬ : 1. ν νλ¦Ώμ μ¬μ©νλ©΄ λΉμ·λΉμ·ν ν΄λμ€μ ν¨μκ° μ¬λ¬ λ² λ§λ€μ΄μ§λ€. λ°λΌμ ν νλ¦Ώ λ§€κ°λ³μμ μ’ μλμ§ μμ ν νλ¦Ώ μ½λλ λΉλνμ μμΈμ΄ λλ€. 2. λΉνμ ν νλ¦Ώ λ§€κ°λ³μλ‘ μκΈ°λ μ½λ λΉλνμ κ²½μ°, ν νλ¦Ώ λ§€κ°λ³μλ₯Ό ν¨μ λ§€κ°λ³μ νΉμ ν΄λμ€ λ°μ΄ν° λ©€λ²λ‘ λ체ν¨μΌλ‘μ¨ λΉλν μ’ μ’ μμ¨ μ μλ€. 3. νμ λ§€κ°λ³μλ‘ μκΈ°λ μ½λ λΉλνμ κ²½μ°, λμΌν μ΄μ§ ννꡬ쑰λ₯Ό κ°μ§κ³ μΈμ€ν΄μ€νλλ νμ λ€μ΄ ν κ°μ§ ν¨μ ꡬνμ 곡μ νκ² λ§λ¦μΌλ‘μ¨ λΉλνλ₯Ό κ°μμν¬ ..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 43 : ν νλ¦ΏμΌλ‘ λ§λ€μ΄μ§ κΈ°λ³Έ ν΄λμ€ μμ μ΄λ¦μ μ κ·Όνλ λ°©λ²μ μμ λμ ν΅μ¬ : νμ ν΄λμ€ ν νλ¦Ώμμ κΈ°λ³Έ ν΄λμ€ ν νλ¦Ώμ μ΄λ¦μ μ°Έμ‘°ν λλ, "this->" λ₯Ό μ λμ¬λ‘ λΆμ΄κ±°λ κΈ°λ³Έ ν΄λμ€ νμ λ¬Έμ λͺ μμ μΌλ‘ μ¨ μ£Όλ κ²μΌλ‘ ν΄κ²°νμ ν νλ¦Ώ ν΄λμ€ μμνλ λ€μ μμ μ½λλ₯Ό 보μ. class CompanyA { public: void sendCleartext(const std::string& msg); void sendEncrypted(const std::string& msg); }; // CompanyB, Compan..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 42 : typename μ λ κ°μ§ μλ―Έλ₯Ό μ λλ‘ νμ νμ ν΅μ¬ : 1. ν νλ¦Ώ λ§€κ°λ³μλ₯Ό μ μΈν λ, class λ° typename μ μλ‘ λ°κΎΈμ΄ μ¨λ 무방νλ€. 2. μ€μ²© μμ‘΄ νμ μ΄λ¦μ μλ³νλ μ©λμλ λ°λμ typename μ μ¬μ©νλ€. λ¨, μ€μ²© μμ‘΄ μ΄λ¦μ΄ κΈ°λ³Έ ν΄λμ€ λ¦¬μ€νΈμ μκ±°λ λ©€λ² μ΄κΈ°ν 리μ€νΈ λ΄μ κΈ°λ³Έ ν΄λμ€ μλ³μλ‘ μλ κ²½μ°μλ μμΈμ΄λ€. μ§λ¬Έ : μλμ λ ν νλ¦Ώ μ μΈλ¬Έμ μ°μΈ class μ typename μ μ°¨μ΄λ 무μμΌκΉ? template class Widget; template class Wi..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 41 : ν νλ¦Ώ νλ‘κ·Έλλ°μ μ²λ¦ΏκΈΈλ μμμ μΈν°νμ΄μ€μ μ»΄νμΌ νμ λ€νμ±λΆν° ν΅μ¬ : 1. ν΄λμ€ λ° ν νλ¦Ώμ λͺ¨λ μΈν°νμ΄μ€μ λ€νμ±μ μ§μνλ€. 2. ν΄λμ€μ κ²½μ°, μΈν°νμ΄μ€λ λͺ μμ μ΄λ©° ν¨μμ μκ·Έλμ²λ₯Ό μ€μ¬μΌλ‘ ꡬμ±λμ΄μλ€. λ€νμ±μ νλ‘κ·Έλ¨ μ€ν μ€μ κ°μ ν¨μλ₯Ό ν΅ν΄ λνλλ€. 3. ν νλ¦Ώ λ§€κ°λ³μμ κ²½μ°, μΈν°νμ΄μ€λ μμμ μ΄λ©° μ ν¨ ννμμ κΈ°λ°μ λμ΄ κ΅¬μ±λλ€. λ€νμ±μ μ»΄νμΌ μ€μ ν νλ¦Ώ μΈμ€ν΄μ€νμ ν¨μ μ€λ²λ‘λ© λͺ¨νΈμ± ν΄κ²°μ ν΅ν΄ λνλλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μΈκ³λ₯Ό νμ μν€λ μΆμ λͺ μμ μΈν°νμ΄μ€(ex..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 40 : λ€μ€ μμμ μ¬μ¬μκ³ ν΄μ μ¬μ©νμ ν΅μ¬ : 1. λ€μ€ μμμ λ¨μΌ μμλ³΄λ€ λ³΅μ‘νλ€. μλ‘μ΄ λͺ¨νΈμ± λ¬Έμ λ₯Ό μΌμΌν¬ λΏ μλλΌ κ°μ μμμ΄ νμν΄μ§ μλ μλ€. 2. κ°μ μμμ μ°λ©΄ ν¬κΈ° λΉμ©, μλ λΉμ©μ΄ λμ΄λλ©° μ΄κΈ°ν λ° λμ μ°μ°μ 볡μ‘λκ° μ»€μ§λ€. λ°λΌμ κ°μ κΈ°λ³Έ ν΄λμ€μλ λ°μ΄ν°λ₯Ό λμ§ μλ κ²μ΄ νμ€μ μΌλ‘ κ°μ₯ μ€μ©μ μ΄λ€. 3. λ€μ€ μμμ μ λ²νκ² μΈ μ μλ κ²½μ°κ° μλ€. μ¬λ¬ μλλ¦¬μ€ μ€ νλλ, μΈν°νμ΄μ€ ν΄λμ€λ‘λΆν° public μμμ μν΄κ³Ό λμμ ꡬνμ λλ ν΄λμ€λ‘λΆν° private μμμ μν€λ ..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 39 : private μμμ μ¬μ¬μκ³ ν΄μ ꡬμ¬νμ ν΅μ¬ : 1. private μμμ μλ―Έλ is-implmented-in-terms-of(...λ ...λ₯Ό μ¨μ ꡬνλ¨) μ΄λ€. λκ° κ°μ²΄ ν©μ±κ³Ό λΉκ΅ν΄μ μ°μ΄λ λΆμΌκ° λ§μ§λ μμ§λ§, νμ ν΄λμ€ μͺ½μμ κΈ°λ³Έ ν΄λμ€μ protected λ©€λ²μ μ κ·Όν΄μΌ ν κ²½μ° νΉμ μμλ°μ κ°μ ν¨μλ₯Ό μ¬μ μν΄μΌ ν κ²½μ°μλ private μμμ΄ λλ¦λλ‘ μλ―Έκ° μλ€. 2. κ°μ²΄ ν©μ±κ³Ό λ¬λ¦¬, private μμμ 곡백 κΈ°λ³Έ ν΄λμ€ μ΅μ ν(EBO) λ₯Ό νμ±νμν¬μ μλ€. μ΄λ κ°μ²΄ ν¬κΈ°λ₯Ό κ°μ§κ³ κ³ ..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 38 : "has-a(...λ...λ₯Ό κ°μ§)" νΉμ "is-implemented-in-terms-of(...λ...λ₯Ό μ¨μ ꡬνλ¨)"λ₯Ό λͺ¨ννν λλ κ°μ²΄ ν©μ±μ μ¬μ©νμ ν΅μ¬ : 1. κ°μ²΄ ν¨μ±(composition)μ μλ―Έλ public μμμ΄ κ°μ§ μλ―Έμ μμ ν λ€λ₯΄λ€. 2. μμ© μμμμ κ°μ²΄ ν©μ±μ μλ―Έλ has-a(...λ...λ₯Ό κ°μ§)μ΄λ€. ꡬν μμμμλ is-implemented-in-terms-of(...λ ...λ₯Ό μ¨μ ꡬνλ¨)μ μλ―Έλ₯Ό κ°λλ€. ν©μ±(composition) μ΄λ, μ΄λ€ νμ μ κ°μ²΄λ€μ΄ κ·Έμ λ€λ₯Έ ν..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 37 : μ΄λ€ ν¨μμ λν΄μλ μμλ°μ κΈ°λ³Έ λ§€κ°λ³μ κ°μ μ λλ‘ μ¬μ μνμ§ λ§μ ν΅μ¬ : μμλ°μ κΈ°λ³Έ λ§€κ°λ³μ κ°μ μ λλ‘ μ¬μ μν΄μλ μ λλ€. μλνλ©΄ κΈ°λ³Έ λ§€κ°λ³μ κ°μ μ μ μΌλ‘ λ°μΈλ©λλ λ°λ©΄, κ°μ ν¨μ(μ€λ²λΌμ΄λ κ°λ₯ν μ μΌν ν¨μ)λ λμ μΌλ‘ λ°μΈλ©λκΈ° λλ¬Έμ΄λ€. μλ μμλ₯Ό 보μ. class Shape { public: enum ShapeColor { Red, Green, Blue }; // λͺ¨λ λνμ μκΈ° μμ μ 그리λ ν¨μλ₯Ό μ 곡ν΄μΌ ν¨ virtual void draw(ShapeColor color = Red) ..
C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 36 : μμλ°μ λΉκ°μ ν¨μλ₯Ό νμ ν΄λμ€μμ μ¬μ μνλ κ²μ μ λ κΈλ¬Ό! ν΅μ¬ : μμλ°μ λΉκ°μ ν¨μλ₯Ό μ¬μ μνλ μΌμ μ λλ‘ νμ§ λ§μ μ¬μ€ μ΄ νλͺ©μ λΉμ°νλ€λ©΄ λΉμ°νλ°, λΉκ°μ ν¨μλ₯Ό μμλ°λλ€λ κ²μ κΈ°λ° ν΄λμ€μ μΈν°νμ΄μ€μ ꡬνμ λͺ¨λ λ¬Όλ €λ°λλ€λ λ»μ΄λ―λ‘ νμν΄λμ€μμ μ¬μ μνλ€λκ² μ΄λ‘ μ μΌλ‘λ λͺ¨μλκ² λλ€. ν΄λΉ κΈ°λ° ν΄λμ€λ₯Ό λ¬Όλ €λ°μ ν΄λμ€λ ν΄λΉ λΉκ°μ ν΄λμ€λ₯Ό νΈμΆν λ κΈ°λ° ν΄λμ€μμ μλν λΉκ°μ ν¨μμ λμμ κ·Έλλ‘ μ¬νν΄μΌ νκΈ° λλ¬Έμ΄λ€! μμλ₯Ό νλ 보μ. class B { public: void m..