λ³΅μ¬ μμ±μ
λ³΅μ¬ μμ±μλ μ΄λ€ κ°μ²΄λ₯Ό μλ‘ μμ±λλ κ°μ²΄μ 볡μ¬νλ λ° μ¬μ©λλ€. μΌλ°μ μΈ λμ μ μ¬μ©λλ κ²μ΄ μλλΌ κ° μ λ¬μ μν ν¨μ 맀κ°λ³μ μ λ¬μ ν¬ν¨ν μ΄κΈ°ν μμ μ μ¬μ©λλ€.
ν΄λμ€μ λ³΅μ¬ μμ±μλ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ μνμ κ°μ§λ€.
Class_name(const Class_name &);
λ³΅μ¬ μμ±μλ, μλ‘μ΄ κ°μ²΄κ° μμ±λμ΄ κ°μ μ’ λ₯μ κΈ°μ‘΄μ κ°μ²΄λ‘ μ΄κΈ°νλ λλ§λ€ νΈμΆλλ€.
κ°μ²΄λ₯Ό κ°μΌλ‘ μ λ¬νλ©΄ λ³΅μ¬ μμ±μκ° νΈμΆλκΈ° λλ¬Έμ, μ°Έμ‘°λ‘ μ λ¬νλ κ²μ΄ μ’λ€.
λν΄νΈ λ³΅μ¬ μμ±μλ static λ©€λ²λ₯Ό μ μΈν λ©€λ²λ€μ λ©€λ²λ³λ‘ 볡μ¬νλ€.
μλ₯Ό λ€μ΄, mottoκ° stringBad κ°μ²΄λΌκ³ κ°μ νλ©΄, λ€μκ³Ό κ°μ λ€ κ°μ§μ μ μ μ μΈμ΄ λ³΅μ¬ μμ±μλ₯Ό νΈμΆνλ€.
StringBad ditto(motto); //StringBad(const StringBad &)μ νΈμΆ νλ€.
StringBad metoo=motto;//StringBad(const StringBad &)μ νΈμΆ
StringBad also = StringBad(motto); //StringBad(const StringBad &)μ νΈμΆ νλ€.
StringBad *pStringBad = new StringBad(motto); //StringBad(const StringBad &)μ νΈμΆ
λμ μ°μ°μ
c++μ ν΄λμ€ κ°μ²΄ λμ μ νμ©νλ€.
μ΄λ€ ν΄λμ€μ λν΄ λμ μ°μ°μλ₯Ό μλμΌλ‘ μ€λ²λ‘λ© νλ€.
Class_name &Class_name::operator=(const Class_name &);
μ€λ² λ‘λ© λμ μ°μ°μλ νλμ κ°μ²΄λ₯Ό κΈ°μ‘΄μ λ€λ₯Έ κ°μ²΄μ λμ ν λ μ¬μ©λλ€.
λμ μ°μ°μλ κ°μ²΄λ₯Ό μ΄κΈ°νν λ λ°λμ μ¬μ©λμ§ μμ.
StringBad metto=knot; //λ³΅μ¬ μμ±μλ₯Ό μ¬μ©νλ€. λμ λ κ°λ₯νλ€.
static ν΄λμ€ λ©€λ² λ³μ
λ©€λ² λ³μλ₯Ό staticμΌλ‘ μ μΈνλ κ²μ΄ κ°λ₯νλ€.
(ν¨μ μ μμ ν¨μ μ μΈμ΄ λΆλ¦¬λμ΄μλ€λ©΄, ν€μλ staticμ ν¨μ μ μκ° μλλΌ ν¨μ μ μΈμ λνλμΌ νλ€.)
static λ©€λ² ν¨μλ κ°μ²΄μ μν΄ νΈμΆλ νμκ° μλ€.
static λ©€λ² ν¨μλ this ν¬μΈν°λ κ°μ§ μλλ€.
static λ©€λ² ν¨μκ° public λΆλΆμ μ μΈλλ©΄, κ·Έ ν¨μλ ν΄λμ€ μ΄λ¦κ³Ό μ¬μ© λ²μ κ²°μ μ°μ°μλ₯Ό μ¬μ©νμ¬ νΈμΆλλ€.
ex)
static int HowMany(){return num_strings;}
λ€μκ³Ό κ°μ΄ νΈμΆ κ°λ₯
int count = string::HowMany();
static λ©€λ² ν¨μλ μ΄λ€ νΉμ κ°μ²΄μλ κ²°ν©νμ§ μκΈ° λλ¬Έμ, μ¬μ© κ°λ₯ν λ°μ΄ν° λ©€λ²λ static λ©€λ² λ°μ μλ€.
μμ±μμ newλ₯Ό μ¬μ©ν λ μ£Όμν μ¬ν
- μμ±μμμ newλ₯Ό μ¬μ©νμ¬ ν¬μΈν° λ©€λ²λ₯Ό μ΄κΈ°ννλ€λ©΄, νκ΄΄μμ λ°λμ deleteλ₯Ό μ¬μ©ν΄μΌ νλ€.
- newμ deleteμ μ¬μ©μ μλ‘ μ΄μΈλ €μΌ νλ€. newλ deleteμ μ§μ μ΄λ£¨κ³ , new []λ delete []μ μ§μ μ΄λ£¨μ΄μΌ νλ€.
- μμ±μκ° μ¬λ¬ κ°μΌ κ²½μ°, λͺ¨λ μμ±μκ° κ°μ λ°©λ²μΌλ‘ newλ₯Ό μ¬μ©ν΄μΌ νλ€. (λͺ¨λ λκ΄νΈλ₯Ό μ¬μ©νκ±°λ, μ¬μ©νμ§ μκ±°λ) νκ΄΄μλ νλλ°μ μμΌλ―λ‘ λͺ¨λ μμ±μκ° κ·Έ νκ΄΄μμ μ΄μΈλ €μΌ νλ€. (νλμ μμ±μμμ newλ₯Ό μ¬μ©νμ¬ ν¬μΈν°λ₯Ό μ΄κΈ°ννκ³ , λ€λ₯Έ μμ±μμμ λ ν¬μΈν°(NULL λλ 0)λ‘ μ΄κΈ°ννλ κ²μ νμ©μ΄ λλ€.)
- κΉμ 볡μ¬λ₯Ό ν΅ν΄ νλμ κ°μ²΄λ₯Ό λ€λ₯Έ κ°μ²΄λ‘ μ΄κΈ°ννλ, λ³΅μ¬ μμ±μλ₯Ό μ μν΄μΌ νλ€. λ³΅μ¬ μμ±μλ 볡μ¬λλ λ°μ΄ν°λ₯Ό 보κ΄ν κΈ°μ΅ κ³΅κ°μ λμ ν΄μΌ νλ€. λ³΅μ¬ μμ±μλ λ°μ΄ν°μ μ£Όμκ° μλ, λ°μ΄ν° κ·Έ μ체λ₯Ό 볡μ¬ν΄μΌ νλ€. λν μν₯μ λ°μ μ μλ λͺ¨λ static ν΄λμ€ λ©€λ²λ€μ κ°±μ ν΄μΌ νλ€.
- κΉμ 볡μ¬λ₯Ό ν΅ν΄ νλμ κ°μ²΄λ₯Ό λ€λ₯Έ κ°μ²΄μ λμ νλ, λμ μ°μ°μλ₯Ό μ μν΄μΌ νλ€. νΉν, κ·Έ λ©μλλ μκΈ° μμ μ λμ νλμ§ κ²μ¬ν΄μΌ νλ€. λ©€λ² ν¬μΈν°κ° μ΄μ μ μ§μνλ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν΄μΌ νλ€. λ°μ΄ν°μ μ£Όμκ° μλ, λ°μ΄ν° μ체λ₯Ό 볡μ¬ν΄μΌ νλ€. νΈμΆν κ°μ²΄μ λν μ°Έμ‘°λ₯Ό 리ν΄ν΄μΌ νλ€.
κ°μ²΄ 리ν΄μ λν κ΄μ°°
-const κ°μ²΄μ λν μ°Έμ‘° 리ν΄
κ°μ²΄λ₯Ό 리ν΄νλ κ²μ λ³΅μ¬ μμ±μλ₯Ό νΈμΆνμ§λ§, μ°Έμ‘°λ₯Ό 리ν΄νλ κ²μ κ·Έλ μ§ μλ€.
μ°Έμ‘°λ νΈμΆνλ ν¨μκ° μ€ν μ€ μΌ λ μ‘΄μ¬νλ κ°μ²΄μ λν μ°Έμ‘°μ¬μΌ νλ€.
-κ°μ²΄ 리ν΄
리ν΄λλ κ°μ²΄κ° νΌνΈμΆ ν¨μμ μ§μμ μ΄λ©΄, ν¨μκ° μ’ λ£λ λ μ§μμ μΈ κ°μ²΄κ° νκ΄΄μλ₯Ό νΈμΆνκΈ° λλ¬Έμ μ°Έμ‘°λ‘ λ¦¬ν΄νλ©΄ μ λλ€. μ΄λ¬ν κ²½μ° μ°Έμ‘°κ° μλλΌ κ°μ²΄λ₯Ό 리ν΄ν΄μΌ νλ€.
λ©μλλ ν¨μκ° μ§μ κ°μ²΄λ₯Ό 리ν΄νλ€λ©΄, μ°Έμ‘°κ° μλλΌ κ°μ²΄λ₯Ό 리ν΄ν΄μΌ νλ€.
public λ³΅μ¬ μμ±μκ° μλ ν΄λμ€μ κ°μ²΄λ₯Ό 리ν΄νλ€λ©΄, κ°μ²΄μ λν μ°Έμ‘°λ₯Ό 리ν΄ν΄μΌ νλ€.
μ€λ² λ‘λ© λμ μ°μ°μμ κ°μ, μΌλΆ λ©μλλ ν¨μλ€μ κ°μ²΄ λλ κ°μ²΄μ λν μ°Έμ‘° μ΄λ κ²μ΄λ 리ν΄ν μ μλ€.
κ°μ²΄λ₯Ό μ§μνλ ν¬μΈν°
newμ μν κ°μ²΄ μ΄κΈ°ν
μΌλ°μ μΌλ‘, Class_nameμ΄ ν΄λμ€ μ΄λ¦μ΄κ³ , valueκ° Type_nameνμ κ°μ΄λ©΄, λ€μκ³Ό κ°μ ꡬ문μ Class_name *pclass=new Class_name(value); λ€μκ³Ό κ°μ μμ±μλ₯Ό νΈμΆνλ€. Class_name(Type_name);
λ€μκ³Ό κ°μ μ¬μν λ³νλ μ΄λ£¨μ΄μ§ μ μλ€.
Class_name(const Type_name &);
λν intλ₯Ό doubleλ‘ λ³ννλ κ²κ³Ό κ°μ, μν μΌμΉμ μν΄ νΈμΆλλ λ³νμ λͺ¨νΈμ±μ΄ μλ ν μ΄λ£¨μ΄μ§ κ²μ΄λ€. λ€μκ³Ό κ°μ νμμ μ΄κΈ°νλ λν΄νΈ μμ±μλ₯Ό νΈμΆνλ€.
Class_name *ptr = new Class_name;