#29. class 상속
#class 상속이란
class 에서 상속은
함수나 변수등, 공통적으로 사용할 것이 있을 때,
부모클래스에서 자식클래스로 상속을 시키면 부모클래스에 있는 것들을
자식클래스에서 사용 할 수 있다.
-> 각 클래스가 공통으로 필요한 것이 있을 때 부모클래스에 공통적인 것을 몰아 넣고
자식클래스1, 자식클래스2 등등 에 상속시켜주면 좀 더 편하게 할 수 있다.
상속 방법은
class 클래스명 옆에 :(콜론)을 붙이고 부모클래스명을 붙이면 된다.
ex) class CChild : CParents
{
};
이때 콜론 뒤에 상속 속성을 쓸 수 있는데,
public / protected / private가 있다.
각 속성에 따라 자식클래스에서 사용법이 달라진다.
class CChild : private CParents
로 상속 받았을때
CParents에 있는 모든 멤버는 private 속성으로 상속 받는다.
이때, CParents에 있는 private 멤버는 접근이 불가하다.
예를 들면
class CParents
{
private:
int a;
public:
int b;
protected:
int c
}
의 부모함수를
class CChild : private CParents 로 상속 받았을 때,
int a 는 접근이 불가능하고
int b 와 int c는 CChild에서 private 속성으로 상속 받게 된다.
class CChild : protected CParents
로 상속 받았을때,
CParents에 있는
int a 는 접근이 불가능하고
int b와 int c는 protected 속성으로 상속 받게 된다.
class CChild : public CParents
로 상속 받았을때,
CParents에 있는
int a 는 접근이 불가능하고
int b는 public
int c는 protected 속성으로 받게된다.
#상속을 받을 때 판단
(자식클래스) is-a (부모클래스) -> 말이 되면 상속
is-a 관계가 어색하면 has-a 관계로 해보면 된다.
(부모클래스) has-a (자식클래스) -> 말이 되면 상속
상속은 ,로 다중상속이 가능하다.
같은 함수명을 쓰는 부모클래스들을 상속받을때는 모호성이 되기 때문에
이때는 멤버로 포함시켜 .연산자로 해당함수를 불러오면 된다.