형식
Class 클래스명:접근자 상속할 클래스명
예) class SampleTest:public Test
상속할 클래스를 Base 클래스, 상위 클래스 라고 한다.
상속 받는 클래스를 Derived 클래스, 하위 클래스라고 하단
접근자에는 Publc,Private,Protected가 있다.
상속받은 멤버들의 접근 권한을 변경시킨다.
public > protected > Private 이면
클래스 멤버 접근 권한자는
클래스 상속 접근 권한자보다 클수 없다.
해당 클래스 상속 접근 권한자의
최대 허용 접근 권한자로 변경된다.
예) A 라는 클래스의 멤버 b가 public 멤버일떄
C 클래스 A 클래스를 private로 상속한다면
A 클래스에 멤버 b는 public 이였으므로 public은 private보다 크므로
private에서 최대 허용 접근자는 Private이므로
A 클래스에 멤버 b는 private로 변경되어 상속된다.
상속하는 클래스 생성시 실행 순서
1. 클래스 메모리 할당(모든 멤버의 필요한 공간이 할당된다, 상속할 클래스에 대한 메모리도 같이 할당된다)
2. Base 클래스의 생성자 호출
3. Derived 클래스의 생성자 호출
4. Derived 클래스의 생성자 실행
5. Base 클래스의 생성자 실행
클래스 생성시 멤버 이니셜라이즈를 사용하여
Base 클래스의 생성자를 명시적으로 지정할 수 있다.
생성자 구문
생성자(인수):상속할 클래스(전달된 인수)
이러면
상속할 클래스에 생성자(전달된 인수)가 호출된다
sampletest Val(a,b,c) 라 하면
생성자
sampletest(a,b,c):test(b,c)
멤버이니셜라이즈는 Const 변수를 초기화할때에도 사용된다
상속하는 클래스 소멸자 실행 순서
1. derived 소멸자 호출
2. base 소멸자 호출
3. 메모리 반환
public 상속시 클래스간 관계는 is-a 관계가 되어야 한다.
Student 클래스가 Person 클래스를 상속한다고 할때
IS-A 관계
HA-A 관계
상속 계층이 내려가면 내려 갈수록 상위 클래스는 일반화(제너럴라이제션)다고 말하고
하위 클래스들은 더 구체화 또는 특제화(스페셜라이제션)말한다.
클래스의 멤버로 타 클래스가 멤버로 사용된경우 클래스의 void 생성자 호출만 가능하다.
즉 초기화 할수 없다. 그러나 java나 C#은 가능하다.
동적인 개체나, 메모리 할당은 힙에 생성된다.
컴파일시 결정되는 메모리 공간(변수,함수 등)은 스택에 할당된다