Inheritance
Base class
class A
{
public:
int x;
protected:
int y;
private:
int z;
};
- ์์ ๊ฐ์ Base class๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ , ๊ฐ ์ผ์ด์ค๋ฅผ ์ดํด๋ณธ๋ค
public inheritance
class B : public A
{
void func_b()
{
x = 10; // x is public
y = 15; // y is protected
// z = 20; // z is private, not accessible
}
};
// ...
int main()
{
B b;
b.x = 10; // x is public
// b.y = 15; y is protected, not accessible
// b.z = 20; z is private, not accessible
}
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์
- Base class์ public ๋ณ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค
- Base class์ protected ๋ณ์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค
- Base class์ private ๋ณ์์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค
protected inheritance
class C : protected A
{
void func_c()
{
x = 10; // x is protected
y = 15; // y is protected
// z = 20; // z is private, not accessible
}
};
// ...
int main()
{
C c;
// c.x = 10; x is protected, not accessible
// c.y = 15; y is protected, not accessible
// c.z = 20; z is private, not accessible
}
- public ํค์๋๊ฐ ๋ถ์ด์๋ x ๋ณ์๊ฐ protected๊ฐ ๋๋ค
- y์ z๋ ๊ธฐ์กด์ ํค์๋๋ฅผ ์ ์งํ๋ค
- ํ์ ํด๋์ค์์์ ์ ๊ทผ ์ฌ๋ถ๋?
- ์ ์ง๋๋ค
private inheritance
class D : private A // 'private' is default for classes
{
void func_d()
{
x = 10; // x is private
y = 15; // y is private
// z = 20; // z is private, not accessible
}
};
// ...
int main()
{
D d;
// d.x = 10; x is private, not accessible
// d.y = 15; y is private, not accessible
// d.z = 20; z is private, not accessible
}
- ์์ ํค์๋๋ฅผ ๋ช ์ํ์ง ์๋ ๊ฒฝ์ฐ์ default
- public ํค์๋์ x์ protected ํค์๋๊ฐ ๋ถ์ y๊ฐ private์ด ๋๋ค
- z๋ ๊ธฐ์กด์ ํค์๋๋ฅผ ์ ์งํ๋ค
- ํ์ ํด๋์ค์์์ ์ ๊ทผ ์ฌ๋ถ๋?
- ์ญ์ ์ ์ง๋๋ค
๊ฒฐ๋ก
- ์ธ๋ถ์์ ์ ๊ทผ ์ public -> protected -> private ์์๋ก ์ ๊ทผ ์ ์ด์๊ฐ ์ ํ๋๋ค
- ๊ทธ๋ฌ๋ ๋ด๋ถ์์์ ์ ๊ทผ์ ์ ์ง๋๋ค