※ LIG Nex1 The SSEN Embedded SW School에서 진행된 내용을 정리한 포스팅입니다.
상속
- 상속의 1차원적 목적
- 코드의 재사용성을 높이기 위해 사용한다.
- 다형성을 구현하는 목적으로 사용된다.
- 다형성: 객체 지향의 꽃
- 상속 관계의 객체가 생성/소멸되는 순서
- 상속받은 객체의 생성자는 상속 받은 모든 부모 객체의 생성자를 호출한 뒤에 호출된다.
- 상속받은 객체의 소멸자는 상속 받은 모든 부모 객체의 소멸자의 호출한 후에 호출된다.
class Point {
private:
int x, y;
public:
Point():x(0),y(0){}
Point(int x,int y):x(x),y(y) {}
printPoint() {
cout << x << ',' << y << ',' << z << '\n';
}
}
- Point가 Point3D로 확장되는 경우
class Point3D {
private:
int x, y, z;
public:
Point():x(0),y(0),z(0){}
Point(int x,int y):x(x),y(y),z(z) {}
printPoint() {
cout << x << ',' << y << ',' << z << '\n';
}
}
- 포함 또는 상속으로 처리할 수 있다.
- 포함과 상속: 객체가 가질 수 있는 두 가지 형태의 관계
- 포함: 사오는 것
- HAS A
- 현재 객체 내에서 포함 관계의 객체를 나타낸다.
- 상속: 생성할 때부터 부모에게서 받아온 것.
- IS A
- 그 자체
포함관계를 이용하여 확장
class Point3D {
Point p;
int z;
public:
point3D():z(0){}
point3D(int x, int y, int z):p(Point(x, y)), z(z){}
}
상속을 이용하여 확장
- 부모 클래스 - 자식 클래스
- Base class - derived class
class Point {
protected: // 상속받은 클래스가 사용할 수 있도록 변경
int x, y;
/* code */
class Point3D : public Point {
private:
int z;
public:
// overriding
printPoint() {
cout << x << ',' << y << ',' << z << '\n';
}
}
상속에 대한 접근 제어자
class Child : access_modifier ParentClass {...};
- public
- 부모 클래스에 정의된 멤버의 접근 제어자가 그대로 상속된다.
- protected
- public이 protected로 바뀌어 상속된다.
- private
- 모두 private으로 상속된다.
- 사용하는 경우는 드물다.
※ 질문, 개선점, 오류가 있다면 댓글로 남겨주세요 :)
'Language > C++' 카테고리의 다른 글
[TheSSEN/C++] 9. 연산자 오버로딩 (0) | 2025.01.27 |
---|---|
[TheSSEN/C++] 8. 다형성 (0) | 2025.01.27 |
[TheSSEN/C++] 6. static과 singleton 패턴 (0) | 2025.01.27 |
[TheSSEN/C++] 5. 객체 지향 프로그래밍 기법 (0) | 2025.01.27 |
[TheSSEN/C++] 4. 객체 지향 프로그래밍 (0) | 2025.01.27 |