c++μ½λμ μ¬νμ©
κ°μ²΄ λ©€λ²λ₯Ό κ°μ§λ ν΄λμ€
valarray ν΄λμ€: νμ΄λ³΄κΈ°
valarray ν€λ νμΌμ΄ valarray ν΄λμ€λ₯Ό μ§μνλ€. μ΄ ν΄λμ€λ μμΉ κ°λ€μ λ€λ£¨λ κ²μ΄ λͺ©νμ΄λ€. valarrayλ ν νλ¦Ώ ν΄λμ€λ‘ μ μλμ΄ μλ€.
ν νλ¦Ώ μΈ‘λ©΄μμ 보면, κ°μ²΄λ₯Ό μ μΈν λ ꡬ체μ μΈ λ°μ΄ν°νμ μ§μ ν΄μΌ νλ€. κ°μ²΄λ₯Ό μ μΈν λ μνλ λ°μ΄ν°νμ΄ λ€μ΄μλ κ°κ΄νΈ(<>)μμ μλ³μ valarrayλ₯Ό λΆμ¬μΌ νλ€.
valarray<int> q_values; //intνμ λ°°μ΄
λ€μμ μμ±μλ€ μ€ μΌλΆλ₯Ό μ¬μ©νλ λͺ κ°μ§ μμ΄λ€.
double gpa[5] = {3.1,3.5,3.8,2.9,3.3};
valarray<double> v1; //double νμ λ°°μ΄, ν¬κΈ° O
valarray<int> v2(8); //intν μμ 8κ°μ§λ¦¬ λ°°μ΄
valarray<int> v3(10,8); //intν μμ 8κ°μ§λ¦¬ λ°°μ΄, κ°κ° 10μΌλ‘ μ€μ
valarray<double> v4(gpa,4); //doubleν μμ 4κ°μ§λ¦¬ λ°°μ΄, gpaμ 첫 4κ°μ μμλ‘ μ΄κΈ°ν
λͺ κ°μ§ λ©μλλ€μ μμ΄λ€.
operator[]()μ κ°λ³ μμμ λν μ κ·Όμ μ 곡νλ€.
size()λ μμλ€μ κ°μλ₯Ό 리ν΄νλ€.
sum()μ μμλ€μ ν©μ 리ν΄νλ€.
max()λ μ΅λ μμλ₯Ό 리ν΄νλ€.
min()λ μ΅μ μμλ₯Ό 리ν΄νλ€.
μ΄κΈ°ν μμ
νλ μ΄μμ νλͺ©λ€μ μ΄κΈ°ννλ λ©€λ² μ΄κΈ°μ 리μ€νΈλ₯Ό μ¬μ©νλ€λ©΄, κ·Έ νλͺ©λ€μ λ©€λ² μ΄κΈ°μ 리μ€νΈμ λνλλ μμλλ‘ μ΄κΈ°ννμ§ μκ³ , κ·Έλ€μ΄ μ μΈλ μμλλ‘ μ΄κΈ°νλλ€.
λ΄ν¬λ κ°μ²΄μ μΈν°νμ΄μ€ μ¬μ©
λ΄ν¬λ κ°μ²΄μ μΈν°νμ΄μ€λ publicμ΄ μλμ§λ§ ν΄λμ€ λ©μλ μμμ μ¬μ© κ°λ₯νλ€.
private μμ
c++μ has-a κ΄κ³λ₯Ό ꡬννλ μ 2μ μλ¨μΌλ‘ private μμμ μ 곡νλ€. private μμμμλ, κΈ°μ΄ ν΄λμ€μ public λ©€λ²μ protected λ©€λ²κ° νμ ν΄λμ€μ private λ©€λ²κ° λλ€.
private μμμμλ, κΈ°μ΄ ν΄λμ€μ public λ©μλκ° νμ ν΄λμ€μ private λ©μλκ° λλ€.
μ¦, νμ ν΄λμ€κ° κΈ°μ΄ ν΄λμ€μ μΈν°νμ΄μ€λ₯Ό μμνμ§ μλλ€. μμμ΄ μ λλ κ²μ has-a κ΄κ³μ μν μ΄λ€.
private μμμ, κ°μ²΄λ₯Ό μ΄λ¦μ΄ μλ μμλ κ°μ²΄λ‘ ν΄λμ€μ μΆκ°νλ€.
private μμμ ꡬνμ νλνμ§λ§ μΈν°νμ΄μ€λ νλνμ§ μλλ€. private μμμ μ¬μ©νλ €λ©΄ ν΄λμ€λ₯Ό μ μν λ public λμ μ private ν€μλλ₯Ό μ¬μ©ν΄μΌ νλ€. (λν΄νΈλ private)
class Student: private std::string,private std::valarray<double> {...} //λ κ°μ ν΄λμ€λ‘λΆν° μμ
κΈ°μ΄ ν΄λμ€κ° νλ μ΄μμΌ κ²½μ° λ€μ€ μμμ΄λΌ λΆλ¦
student(const char *str,const double *pd,int n)
:std::string(str),ArrayDb(pd,n) {}
//μμμ μν΄ ν΄λμ€ μ΄λ¦μ μ¬μ©νλ€.
-κΈ°μ΄ ν΄λμ€ λ©μλμ μ κ·ΌνκΈ°
private μμμμλ, ν΄λμ€ μ΄λ¦κ³Ό μ¬μ© λ²μ κ²°μ μ°μ°μλ₯Ό μ¬μ©νμ¬ κΈ°μ΄ ν΄λμ€μ λ©μλλ₯Ό νΈμΆ κ°λ₯
double student::Average() const
{
if(ArrayDb::size()>0)
return ArrayDb::sum()/ArrayDb::size();
else
return 0;
}
-κΈ°μ΄ ν΄λμ€ κ°μ²΄μ μ κ·ΌνκΈ°
studentκ° stringμΌλ‘λΆν° μμλμλ€κ³ κ°μ
student κ°μ²΄λ₯Ό string κ°μ²΄λ‘ λ°μ΄ν°ν λ³νμ νλ κ²μ΄ κ°λ₯ *thisλ νΈμΆνλ κ°μ²΄μ΄λ€. μ΄ κ²½μ° studentν κ°μ²΄μ΄λ€. μμ±μ νΈμΆλ‘ μλ‘μ΄ κ°μ²΄λ€μ΄ λ§λ€μ΄μ§λ κ²μ νΌνλ €λ©΄, λ°μ΄ν°ν λ³νμ μ¬μ©νμ¬ μ°Έμ‘°λ₯Ό λ§λ€μ΄μΌ νλ€.
const string &student::Name() const
{
return (const string &)*this;
}
-κΈ°μ΄ ν΄λμ€ νλ λμ μ κ·ΌνκΈ°
ν΄λμ€ μ΄λ¦μ μ¬μ©νμ¬ ν¨μ μ΄λ¦μ λͺ μμ μΌλ‘ μ§μ νλ ν ν¬λμ, νλ λ ν¨μκ° ν΄λμ€μ μνμ§ μκΈ° λλ¬Έμ μ μ©λμ§ μλλ€. κ·Έλ¬λ κΈ°μ΄ ν΄λμ€λ‘ λ³ννλ λͺ μμ μΈ λ°μ΄ν°ν λ³νμ μ¬μ©νμ¬ μ νν ν¨μλ₯Ό νΈμΆν μ μλ€.
ν΄λμ€ λ©μλμ μλ κΈ°μ΄ ν΄λμ€ κ°μ²΄μ μ κ·Όν λμ λμΌν ν ν¬λμ΄λ€. λ€λ§ student κ°μ²΄λ₯Ό μν μ΄λ¦μ κ°μ§λ νλ λλ₯Ό μ¬μ©νλ€.
λ€μκ³Ό κ°μ νλ λ ν¨μ μ μλ₯Ό μκ°ν΄λ³΄μ
ostream &operator<<(ostream &os,const student &stu)
{
os<<(const string &) stu<<" νμμ μ±μ ν:\n";
...
}
컨ν μΈλ¨ΌνΈμ private μμ
μΌλ°μ μΌλ‘, has-a κ΄κ³λ₯Ό λͺ¨λΈλ§νλ €λ©΄ 컨ν μΈλ¨ΌνΈλ₯Ό μ¬μ©ν΄μΌ νλ€. μ ν΄λμ€κ° μ€λ¦¬μ§λ ν΄λμ€μ protected λ©€λ²λ€μ μ κ·Όν νμκ° μκ±°λ, κ°μ ν¨μλ€μ λ€μ μ μν νμκ° μμ κ²½μ°μλ private μμμ μ¬μ©ν΄μΌ νλ€.
protected μμ
protected μμμ κΈ°μ΄ ν΄λμ€λ₯Ό λμ΄ν λ ν€μλ protectedλ₯Ό μ¬μ©νλ€.
class Student: protected std::string,protected std::valarray<double>
protected μμμμλ, κΈ°μ΄ ν΄λμ€μ public λ©€λ²μ protected λ©€λ²κ° νμ ν΄λμ€μ protected λ©€λ²κ° λλ€.
private μμκ³Ό protected μμμ μ£Όλ μ°¨μ΄μ μ, νμ ν΄λμ€λ‘λΆν° λ λ€λ₯Έ ν΄λμ€λ₯Ό νμμν¬ λ λλ¬λλ€. private μμμμλ 3μΈλ ν΄λμ€(νμ ν΄λμ€λ‘λΆν° λ νμλ ν΄λμ€)κ° κΈ°μ΄ ν΄λμ€ μΈν°νμ΄μ€μ λ΄λΆμ μΈ μ¬μ©κΆμ μ»μ§ λͺ»νλ€. (public κΈ°μ΄ ν΄λμ€ λ©μλλ€μ νμ ν΄λμ€μμ privateμ΄ λκ³ , private λ©€λ²μ λ©μλλ€μ κ·Έλ€μ λ¨κ³μ νμμμ μ§μ μ κ·Όν μ μκΈ° λλ¬Έ)
protected μμμμλ, public κΈ°μ΄ λ©μλλ€μ΄ 2μΈλμμ protectedκ° λλ€. κ·Έλ¬λ―λ‘ protected λ©€λ²λ€μ κ·Έ λ€μ λ¨κ³μ νμμμ μ¬μ© κ°λ₯
μμμ μ μΊμ€ν : λͺ μμ λ°μ΄ν°ν λ³νμ μ¬μ©νμ§ μμλ κΈ°μ΄ ν΄λμ€ ν¬μΈν°λ μ°Έμ‘°κ° νμ ν΄λμ€ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ€.
νΉμ± | public μμ | protected μμ | private μμ |
public λ©€λ² | νμ ν΄λμ€μ public λ©€λ² | νμ ν΄λμ€μ protected λ©€λ² | νμ ν΄λμ€μ private λ©€λ² |
protected λ©€λ² | νμ ν΄λμ€μ protected λ©€λ² | νμ ν΄λμ€μ protected λ©€λ² | νμ ν΄λμ€μ private λ©€λ² |
private λ©€λ² | κΈ°μ΄ ν΄λμ€ μΈν°νμ΄μ€λ₯Ό ν΅ν΄μλ§ μ κ·Ό κ°λ₯ | κΈ°μ΄ ν΄λμ€ μΈν°νμ΄μ€λ₯Ό ν΅ν΄μλ§ μ κ·Ό κ°λ₯ | κΈ°μ΄ ν΄λμ€ μΈν°νμ΄μ€λ₯Ό ν΅ν΄μλ§ μ κ·Ό κ°λ₯ |
μμμ μ μΊμ€ν | κ°λ₯νλ€ | νμ ν΄λμ€ μμμλ§ κ°λ₯ | λΆκ°λ₯ |