Programming Language/C++

[TheSSEN/C++] 7. 상속

coco_daddy 2025. 1. 27. 17:11
※ 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으로 상속된다.
    • 사용하는 경우는 드물다.

※ 질문, 개선점, 오류가 있다면 댓글로 남겨주세요 :)