728x90
상속 (Inheritance)
- 클래스 사이에서 상속관계를 정의하지만 객체 사이에는 상속 관계가 없다.
- 기본 클래스의 속성과 기능을 파생 클래스에 물려주는 것
- 기본 클래스(base class), 부모 클래스 : 상속해주는 클래스
- 파생 클래스(derived class), 자식 클래스 : 상속받는 클래스
- 기본 클래스의 속성과 기능을 물려받고 자신만의 속성과 기능을 추가하여 작성
- 기본 클래스에서 파생 클래스로 갈수록 클래스의 개념이 구체화
- 다중 상속을 통한 클래스의 재활용성 높임
[ 상속의 목적 및 장점 ]
- 간결한 클래스 작성 : 기본 클래스의 기능을 물려받아 파생 클래스를 간결히 작성 가능
- 클래스 간의 계층적 분류 및 관리의 용이함 : 클래스들의 구조적 관계 파악 용이
- 클래스 재사용과 확장을 통한 소프트웨어 생산성 향상 : 앞으로 있을 상속에 대비한 클래스의 객체 지향성 설계 필요
[ 상속 선언 ]
- Student 클래스는 Person 클래스의 멤버를 물려받는다.
- StudentWorker 클래스는 Student의 멤버를 물려받는다. ≫ Student가 물려받은 Person의 멤버도 함께 물려받는다.
{ 예제 8-1 } Point 클래스를 상속받는 ColorPoint 클래스 만들기
#include <iostream>
#include <string>
using namespace std;
// 2차원 평면에서 한 점을 표현하는 클래스 Point 선언
class Point {
int x, y; // (x, y) 좌표값
public:
void set(int x, int y) { this->x = x; this->y = y; }
void showPoint() {
cout << "(" << x << "," << y << ")" << endl;
}
};
// 2차원 평면에서 컬러 점을 표현하는 클래스 ColorPoint. Point를 상속받음
class ColorPoint : public Point {
string color;
public:
void setColor(string color) { this->color =color; }
void showColorPoint();
};
void ColorPoint::showColorPoint() {
cout << color << ":";
showPoint(); // Point의 showPoint() 호출
}
int main() {
Point p; // 기본 클래스의 객체 생성
ColorPoint cp; // 파생 클래스의 객체 생성
cp.set(3,4); // 기본 클래스의 멤버 호출
cp.setColor("Red"); // 파생 클래스의 멤버 호출
cp.showColorPoint(); // 파생 클래스의 멤버 호출
상속과 객체 포인터
[ 업 캐스팅 ]
- 파생 클래스 포인터가 기본 클래스 포인터에 치환되는 것
- 예) 사람을 동물로 봄
[ 다운 캐스팅 ]
- 기본 클래스의 포인터가 파생 클래스의 포인터에 치환되는 것
protected 접근 지정자
[ 접근 지정자 ]
- private 멤버
- 선언된 클래스 내에서만 접근 가능
- 파생된 클래스에서도 기본 클래스의 private 멤버 직접 접근 불가
- public 멤버
- 선언된 클래스나 외부 어떤 클래스, 모든 외부 함수에 접근 허용
- 파생 클래스에서 기본 클래스의 public 멤버 접근 가능
- protected 멤버
- 선언된 클래스에서 접근 가능
- 파생 클래스에서만 접근 허용 : 파생 클래스가 아닌 다른 클래스나 외부 함수에서는 protected 멤버를 접근할 수 없다.
[ 멤버의 접근 지정에 따른 접근성 ]
[ 생성자 호출 관계 및 실행 순서 ]
[ 상속 관계의 생성자 매개 변수 처리 예시 ]
- 컴파일러에 의해 묵시적으로 기본 클래스의 생성자를 선택하는 경우 있음
- 매개 변수를 가진 파생 클래스의 생성자는 묵시적으로 기본 클래스의 기본 생성자를 선택함
- 파생 클래스의 생성자에서 명시적으로 기본 클래스의 생성자를 선택함
728x90
'Programming > C++' 카테고리의 다른 글
[C++ 스터디] 템플릿과 표준 템플릿 라이브러리{STL}_(2) (0) | 2022.12.08 |
---|---|
[C++ 스터디] 템플릿과 표준 템플릿 라이브러리{STL}_(1) (0) | 2022.12.04 |
[C++ 스터디] static 멤버 (0) | 2022.11.20 |
[C++ 스터디] 참조리턴 / 복사 생성자 / 함수 중복 (0) | 2022.11.13 |
[C++ 스터디] 객체 치환 및 객체 리턴 | Vector (0) | 2022.11.06 |