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 ๋ฉค๋ฒ | ๊ธฐ์ด ํด๋์ค ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ์ ๊ทผ ๊ฐ๋ฅ | ๊ธฐ์ด ํด๋์ค ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ์ ๊ทผ ๊ฐ๋ฅ | ๊ธฐ์ด ํด๋์ค ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ์ ๊ทผ ๊ฐ๋ฅ |
์์์ ์ ์บ์คํ | ๊ฐ๋ฅํ๋ค | ํ์ ํด๋์ค ์์์๋ง ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |