νλ λ ν΄λμ€
λ€μ ꡬ문μ Remoteλ₯Ό νλ λ ν΄λμ€λ‘ λ§λ λ€.
friend class Remote;
νλ λ μ μΈμ public, private, protected λΆλΆ μ΄λμλ λ μ μλ€.
νλ λ λ©€λ² ν¨μ
ν΄λμ€ μ 체λ₯Ό νλ λλ‘ λ§λλ λμ , μνλ λ©μλλ€λ§ λ€λ₯Έ ν΄λμ€μ λν΄ νλ λλ‘ λ§λλ κ²μ΄ κ°λ₯νλ€.
Remote::set_chan()μ Tv ν΄λμ€μ λν΄ νλ λλ‘ λ§λλ λ°©λ²μ, Tv ν΄λμ€ μ μΈ μμ κ·Έκ²μ νλ λλ‘ μ μΈνλ κ².
class Tv
{
friend void Remote::set_chan(Tv &t,int c);
...
}
κ·Έλ¬λ μ»΄νμΌλ¬κ° μ΄ κ΅¬λ¬Έμ μ²λ¦¬νλ €λ©΄ Remote μ μλ₯Ό 미리 μκ³ μμ΄μΌ νλ€. μ¬μ μ μΈμ μ¬μ©ν΄ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
class Tv; //μ¬μ μ μΈ
class Remote{...};
class Tv{...};
Remote μ μΈμ΄ λ€μκ³Ό κ°μ μΈλΌμΈ μ½λλ₯Ό ν¬ν¨νκ³ μλ€κ³ κ°μ ν΄λ³΄μ.
void onoff(Tv &t) { t.onoff(); }
μ΄ μ μΈμ Tv λ©μλλ₯Ό νΈμΆνκΈ° λλ¬Έμ, μ΄ μμ μμ μ»΄νμΌλ¬λ Tvν΄λμ€ μ μΈμ μ΄λ―Έ μκ³ μμ΄μΌ ν¨.
μ΄ λ¬Έμ μ ν΄κ²°μ± μ Remoteλ₯Ό λ©μλ μ μΈμΌλ‘ μ ννκ³ , μ€μ μ μλ€μ Tvν΄λμ€ μ μΈ λ€μ λλ κ²μ΄λ€.
class Tv; //μ¬μ μ μΈ
class Remote{...}; //Tvλ₯Ό μ¬μ©νλ Remote λ©μλλ€μ μν
class Tv{...}; //μ¬κΈ°μ Remote λ©μλλ€μ μ€μ μ μλ€μ λ£λλ€.
λ΄ν¬ ν΄λμ€
λ€λ₯Έ ν΄λμ€ μμ μ μΈλ ν΄λμ€λ₯Ό λ΄ν¬ ν΄λμ€λΌ νλ€. ν΄λμ€ μ μΈμ λ΄ν¬νκ³ μλ ν΄λμ€μ λ©€λ² ν¨μλ€μ, λ΄ν¬ ν΄λμ€μ κ°μ²΄λ€μ μμ±νμ¬ μ¬μ©ν μ μλ€. ν΄λμ€ μΈλΆμμ λ΄ν¬ ν΄λμ€ μ μΈμ΄ public λΆλΆμ λ€μ΄ μκ³ , μ¬μ© λ²μ κ²°μ μ°μ°μλ₯Ό μ¬μ©ν΄μΌλ§ λ΄ν¬ ν΄λμ€λ₯Ό μ¬μ©ν μ μλ€. ν΄λμ€λ₯Ό λ΄ν¬μν€λ μΌλ°μ μΈ μ΄μ λ, λ€λ₯Έ ν΄λμ€μ ꡬνμ μ§μνκ³ , μ΄λ¦ μΆ©λμ λ§λ κ²μ΄λ€.
-λ΄ν¬ ν΄λμ€μ μ κ·Ό
λ΄ν¬ ν΄λμ€μλ λ μ’ λ₯μ μ κ·Ό ννκ° μλ€.
1. λ΄ν¬ ν΄λμ€κ° μ μΈλ μ₯μκ° λ΄ν¬ ν΄λμ€μ μ¬μ©λ²μλ₯Ό μ ννλ€.
2. λ΄ν¬ ν΄λμ€μ public, protected, private λΆλΆλ€λ κ·Έ ν΄λμ€ λ©€λ²μ λν μ κ·Όμ μ ννλ€.
-μ¬μ© λ²μ
λ΄ν¬ ν΄λμ€κ° μ 2 ν΄λμ€μ private λΆλΆμ μ μΈλμλ€λ©΄, κ·Έ λ΄ν¬ ν΄λμ€λ μ 2 ν΄λμ€μλ§ μλ €μ§λ€.
λ΄ν¬ ν΄λμ€κ° μ 2 ν΄λμ€μ protected λΆλΆμ μ μΈλμλ€λ©΄, κ·Έ λ΄ν¬ ν΄λμ€λ μ 2 ν΄λμ€μκ² μλ €μ§μ§λ§, μ 2 ν΄λμ€μ μΈλΆμλ 보μ΄μ§ μλλ€. νμ ν΄λμ€λ λ΄ν¬ ν΄λμ€μ μ‘΄μ¬λ₯Ό μκ² λκ³ , λ΄ν¬ ν΄λμ€νμ κ°μ²΄λ₯Ό μ§μ μμ± κ°λ₯.
λ΄ν¬ ν΄λμ€κ° μ 2 ν΄λμ€μ public λΆλΆμ μ μΈλμλ€λ©΄, κ·Έ λ΄ν¬ ν΄λμ€λ μ 2 ν΄λμ€μμ, μ 2 ν΄λμ€λ‘λΆν° νμλ ν΄λμ€λ€μμ, κ·Έλ¦¬κ³ public μ΄κΈ° λλ¬Έμ μ 2 ν΄λμ€μ μΈλΆμμ μ¬μ©ν μ μλ€. κ·Έλ¬λ λ΄ν¬ ν΄λμ€λ ν΄λμ€ μ¬μ© λ²μλ₯Ό κ°μ§κΈ° λλ¬Έμ, μ 2 ν΄λμ€μ μΈλΆμμλ ν΄λμ€ μ νμμ ν¨κ» μ¬μ©ν΄μΌ νλ€.
λ΄ν¬ ν΄λμ€, λ΄ν¬ ꡬ쑰체, λ΄ν¬ μ΄κ±°μ²΄μ μ¬μ© λ²μ νΉμ±
μ 2 ν΄λμ€μμ μ μΈλ μ₯μ | μ 2 ν΄λμ€μμ μ¬μ© μ¬λΆ | μ 2 ν΄λμ€λ‘λΆν° νμλ ν΄λμ€μμ μ¬μ© μ¬λΆ | λ°κΉ₯ μΈκ³μμ μ¬μ© μ¬λΆ |
private λΆλΆ | O | X | X |
protected λΆλΆ | O | O | X |
public λΆλΆ | O | O | O ν΄λμ€ μ νμ μ¬μ© |
-μ κ·Ό μ μ΄
μ΄λ€ ν΄λμ€κ° μ¬μ© λ²μ μμ λ€μ΄μ€λ©΄, μ κ·Ό μ μ΄κ° κ°μλλ€. μΌλ° ν΄λμ€ μ κ·Όμ μ μ΄νλ κ·μΉκ³Ό λμΌν κ·μΉμ΄ λ΄ν¬ ν΄λμ€ μ κ·Όμλ μ μ©λλ€.