상속
사람이라는 객체와 학생,선생님,사부님이라는 객체가 있다.
학생, 선생님, 사부님은 모두 사람이라는 객체이며 동시에 각각의 특성을 지닌다.
즉 사람이라는 객체를 기반으로 각각의 또다른 특성이 있게된다.
이렇듯 클래스도 여러 객체가 반드시 한객체의 성질을 기반으로 만들어 졌을때 기반이 되는 클래스를 부모 클래스라 하며 이에대한 특성을 갖는 클래스를 자식클래스라 한다.
부모는 자식을 품지만 자식은 부모를 품지 못한다를 기억하자.(부모가 자식을 품을떄 부모에게 없는 변수나 함수는 slicing된다.ㄷ)
정의
class <클레스명> : <접근제한자> <상속받을 클레스명> {
자식클레스에서 추가로 설정해줄 맴버변수나 함수 만들기]
};
그렇다면 위에 <접근제한자> <상속받을 클레스명> 에서 접근제한자의 역할은 무엇일까??
- private 상속
private로 상속시 private보다 넓은 접근 범위(protect,public)의 맴버변수및 함수들을 private접근 제한자로 변환시킨다는 의미이다.
즉 부모클래스의 private는 private로 유지가 되고 나머지 변수및 함수 모두 private 처리되므로 자식클래스 및 외부클레스 에서는 접근이 불가능하다.
- protect로 상속
private는 그대로두고, protect보다 넓은 범위인 public을 protect로 변환한다.
protect의 상속은 조금 헷갈릴 수 있다.
protect로 상속하는 경우 부모클레스의 protect와 public 클레스 범위 의 함수나 변수를 사용 할 수 있다.(이때 public -> protect로 되겠지?)
하지만 protect는 외부 객체에서 참조가 불가능하다
예를들면
class 부모 {
protect:
function ~;
}
class 자식 :
protect : 부모
{
}
int main(){
자식.객체;
자식.function -->오류 발생!
}
'언어 > CPP(cpp)' 카테고리의 다른 글
템플릿 (0) | 2018.02.06 |
---|---|
오버라이딩 (0) | 2018.02.06 |
동적배열과 이차원 동적배열 (0) | 2018.02.06 |
const (0) | 2018.02.06 |
operator overloading(연산자 오버로딩) (0) | 2018.02.05 |