: 한 클래스가 다른 (기반)클래스에서 정의된 속성(데이터, 함수)을 그대로 물려 받는 것을 말함.
-> 이때 반드시 public 상속을 사용해야 함.
1) 기존 클래스에서 새로운 기능을 추가할 수 있음.
// 다형성을 설계하기 위한 기본 과정
2) 중복되는 코드가 없어짐.
: 파생클래스만 접근할 수 있게 하는 접근 지정자.
: 파생 클래스의 생성자 호출시, 기반 클래스의 생성자 호출을 완료 후,
파생 생성자 호출 순서로 생성자가 호출됨.
파생에서 기반 클래스의 생성자를 직접 호출하지 않으면,
기반 클래스의 디폴트 생성자를 호출하게 됨.
기반 클래스의 인자가 있는 생성자를 호출하고자 하면,
파생의 초기화리스트에서 명시적으로 호출해야 함.
1.기반 클래스의 디폴트 생성자를 private에 위치할 경우,
파생 클래스의 생성자에서 기반 클래스의 생성자를 호출할 수 없음.
-> 왜냐하면, private은 기반클래스만 접근이 가능하므로.
-> protected로 하면 문제 없음.
problem
: Person 클래스(기반) 와 Student클래스(파생) 만들고, Person에 2개의 인자.
이름, 나이 생성자 만들자.
class Animal
{}
class Dog : public Animal
{
public :
Dog() {}
}
여기에서 컴파일러가 알아서 밑의 코드처럼 만듬
class Dog : public Animal
{
public :
Dog() : Animal() {} // 컴파일러가 암묵적으로 만들어 놓음.
}
외부에서 Animal 과 dog 객체를 만들어서, 기반 생성자의 접근 지정자를
변경해보고 출력해보아라.
: 자기 자신의 객체를 만들 수 없지만, 파생 객체는 만들 수 있음.
가) 기반 객체를 생성하라.
나) 파생 객체를 생성하라