상속
공통적인 특성을 매번 구현하는 대신, 하나의 기본 클래스를 정의하고 이를 상속받으면 유지보수가 쉬워지고 코드의 중복을 줄일 수 있다.
상속 대상이 되는 클래스를 "기본(부모) 클래스", 상속을 받아 새로운 클래스를 정의하면 이를 "파생(자식) 클래스"라고 한다.
#include <iostream>
#include <string>
using namespace std;
class ParentCar {
protected:
string color;
int speed;
public:
ParentCar(string c, int s) : color(c), speed(s) {}
void move() {
cout << "The ParentCar is moving at " << speed << " km/h.\n";
}
void setColor(string c) {
color = c;
}
string getColor() {
return color;
}
};
생성자는 멤버 초기화 리스트를 통해 멤버 변수들을 초기화할 수 있다.
멤버 초기화 리스트는 생성자 코드보다 먼저 수행된다.
자식 클래스의 생성자는 부모 클래스의 생성자를 호출할 수 있다.
부모 클래스는 부모 클래스의 생성자가 초기화하고, 자식 클래스는 자식 클래스의 생성자가 초기화할 수 있다.
class ChildCar1 : public ParentCar {
private:
bool hasBasket;
public:
ChildCar1(string c, int s, bool basket) : ParentCar(c, s), hasBasket(basket) {}
void ringBell() {
cout << "ChildCar1 bell: Ring Ring!\n";
}
};
class ChildCar2 : public ParentCar {
private:
int cargoCapacity;
public:
ChildCar2(string c, int s, int capacity)
: ParentCar(c, s), cargoCapacity(capacity) {
}
void loadCargo() {
cout << "ChildCar2 loading cargo. Capacity: " << cargoCapacity << " tons.\n";
}
};
다형성
다형성이란 기본이 되는 클래스를 만들어 함수의 인터페이스를 정의하고 실제 구현은 파생 클래스에서 담당하게 하는 기법을 말한다.
이 때, 동적 바인딩을 통해 실제 호출된 객체의 타입에 따라 적절한 파생 클래스의 함수가 실행되도록 하려면 함수 앞에 `virtual` 키워드를 붙여야 한다.
`virtual` 키워드를 붙이면 가상 함수 테이블이 생성된다.
이 가상 함수 테이블에는 기본 클래스에서 `virtual`로 선언된 함수가 파생 클래스에서 재정의된 경우 그 위치가 기록되어 동적 디스패치가 가능해진다.
순수 가상 함수
순수 가상 함수란 기본 클래스에서 구현하지 않고, 반드시 파생 클래스에서 구현하도록 강제하는 가상 함수다.
순수 가상 함수를 하나 이상 포함하는 클래스를 추상 클래스라고 한다.
추상 클래스는 직접 인스턴스를 생성할 수 없고, 포인터 혹은 참조를 통해서만 사용할 수 있다.
'본 캠프 > Note' 카테고리의 다른 글
[게임 개발자를 위한 C++ 문법] 템플릿 (0) | 2025.08.20 |
---|---|
[게임 개발자를 위한 C++ 문법] 자원 관리하기 (0) | 2025.08.19 |
[게임 개발자를 위한 C++ 문법] Class 개념 (2) | 2025.08.14 |
[게임 개발자를 위한 C++ 문법] 포인터와 레퍼런스 (3) | 2025.08.13 |
[게임 개발자를 위한 C++ 문법] 프로그래밍 기초 (2) | 2025.08.12 |