반응형
- 객체 간 관계: 포함 관계와 상속 관계로 나뉨
- 포함 관계(has-a): 특정 객체가 다른 객체를 포함하는 관계
- 상속 관계(is-a): 한 클래스가 다른 클래스를 확장하는 관계
- 재정의(오버라이딩): 상속받은 메서드를 새로운 방식으로 구현
- 가상 함수와 다형성을 활용하여 객체지향 설계를 효율적으로 수행 가능
6.1 객체 간 관계
- 포함 관계: 한 클래스가 다른 클래스의 멤버 변수로 포함됨
- 상속 관계: 한 클래스가 다른 클래스로부터 기능을 확장
class Engine {
public:
void start() { cout << "Engine started" << endl; }
};
class Car {
Engine engine; // 포함 관계
public:
void start() { engine.start(); }
};
6.2 상속에 대한 기본 이론
- class Derived : public Base 형태로 상속
- 기본 클래스의 멤버를 상속받아 사용 가능
- 접근 지정자: public, protected, private
class Base {
protected:
int value;
};
class Derived : public Base {
public:
void setValue(int v) { value = v; }
};
6.3 파생 클래스 작성
- 파생 클래스에서 새로운 멤버 함수 및 변수를 추가 가능
class Base {
public:
void show() { cout << "Base class" << endl; }
};
class Derived : public Base {
public:
void show() { cout << "Derived class" << endl; }
};
6.4 메서드 재정의(중요)
- virtual 키워드를 사용하여 가상 함수로 선언
- 다형성을 활용하여 동적 바인딩 수행
class Base {
public:
virtual void show() { cout << "Base class" << endl; }
};
class Derived : public Base {
public:
void show() override { cout << "Derived class" << endl; }
};
6.5 상속과 생성자, 소멸자
- 생성자는 기본 클래스 → 파생 클래스 순으로 호출
- 소멸자는 반대로 파생 클래스 → 기본 클래스 순으로 호출
class Base {
public:
Base() { cout << "Base 생성자" << endl; }
~Base() { cout << "Base 소멸자" << endl; }
};
class Derived : public Base {
public:
Derived() { cout << "Derived 생성자" << endl; }
~Derived() { cout << "Derived 소멸자" << endl; }
};
- 상속 관계에서 부모 클래스의 생성자를 명시적으로 호출해야 할 경우 : Base() 형태로 초기화 목록을 사용
- 다형성 활용 시 소멸자를 virtual로 선언해야 올바르게 동작
class Base {
public:
virtual ~Base() { cout << "Base 소멸자" << endl; }
};
반응형
'SW > C++' 카테고리의 다른 글
7장. 연산자 다중 정의 (0) | 2025.03.05 |
---|---|
L-value와 R-value (0) | 2025.02.28 |
6장. 복사 생성자와 임시 객체 (0) | 2025.02.26 |
5장. 클래스 (0) | 2025.02.26 |
4장. 함수와 네임스페이스 (0) | 2025.02.26 |