클래스 상속성
자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것을 의미한다.
예를 들면 자동차라는 클래스는 운전이 가능한 함수와 바퀴 및 핸들이라는 맴버변수가 있다고 가정한다면,
이를 상속받은 현대차라는 클래스도 동일한 함수와 맴버변수를 사용할수 있는것이다.
상속을 받을때는 클래스 선언시 자식클래스: public 부모클래스로 상속 시킬수 있다.
당연하게도 자식클래스가 독자적으로 가지는 함수 및 맴버변수는 부모클래스에서 사용할수 없다.
현대차라는 클래스의 현대마크라는 맴버변수는 자동차에 사용 할 수 없다.
class Car
{
public:
void move(){}
public:
int _speed;
int _price;
};
class Hyun :public Car
{
//move와 _speed를 상속받아 사용가능
};
상속의 오버라이딩
상속받은 맴버함수중에서 그 기능을 다른 의미로 재정의하여 사용할수 있다.
물론 상속받은 맴버함수는 없어지는것이 아니기에 재사용도 가능하다.
class Car
{
public:
void move(){}
public:
int _speed;
int _price;
};
class Hyun :public Car
{
public:
void move(){cout<<"현대"<<endl;}//함수 재정의
};
Hyun h;
h.move();//재정의된 함수 호출
h.Car::move();//부모클래스의 함수 호출
상속의 생성자/소멸자
상속을 받은 자식클래스는 클래스가 생성될때 자신의 생성자와 소멸자 그리고 부모클래스의 생성자와 소멸자를 모두 호출하게된다.
실행 순서로는 자식의 생성자->(자식의 선처리 영역에서 호출)부모 생성자->(block문)자식생성자->생명주기 소멸->자식의 소멸자->(자식의 후처리 영역 호출)부모 소멸자
class Car
{
public:
Car()
{
cout<<"1";
}
~Car()
{
cout<<"4";
}
void move(){}
public:
int _speed;
int _price;
};
class Hyun : public Car
{
public:
Hyun()
{
cout<<"2";
}
~Hyun()
{
cout<<"3";
}
};
콘솔 결과:1 2 3 4
상속 관계에서 생성자 제어
위에서 언급하였듯이 자식클래스를 생성하면 부모의 기본 생성자 또한 호출된다. 인자를 받는 자식 생성자 또한 부모클래스의 기본생성자를 호출한다. 하지만 상황에 따라 지정된 부모클래스의 생성자를 호출해야 될때도 있는데, 이럴때는
자식클래스의 생성자 : 지정할 부모클래스의 생성자로 호출할수 있다.
class Car
{
public:
Car()
{
cout<<"1";
}
Car(int speed)
{
cout<<"5";
}
~Car()
{
cout<<"4";
}
void move(){}
public:
int _speed;
int _price;
};
class Hyun : public Car
{
public:
Hyun()//부모클래스의 기본생성자가 호출됨
{
cout<<"2";
}
Hyun(int price):Car(100)//부모클래스의 지정 생성자가 호출됨
{
cout<<"7";
}
~Hyun()
{
cout<<"3";
}
};
'C++복습' 카테고리의 다른 글
C++복습) Modern C++/ Auto (0) | 2021.12.22 |
---|---|
C++복습) 생성자 맴버 초기화 리스트 (0) | 2021.11.22 |
C++복습) 다형성 (0) | 2021.11.21 |
C++복습) 클래스 캡슐화(은닉성) (0) | 2021.11.20 |
C++ 복습) 클래스생성자와 소멸자 (0) | 2021.11.19 |
댓글