- 클래스 상속
- 기초클래스 (base class)라고 부르는 클래스로부터 모든 메서드와 멤버들을 상속받아, 새로운 파생 클래스(derived class)를 만들 수 있게 한다.
- 상속을 통하여 다음과 같은 일들을 할 수 있다.
1. 기존의 클래스에 기능을 추가할 수 있다.
2. 클래스가 나타내고 있는 데이터에 다른 것을 더 추가할 수 있다.
3. 클래스 메서드가 동작하는 방식을 변경할 수 있다.
- 어떤 클래스를 다른 클래스로부터 상속할 때, 오리지널 클래스를 기초 클래스라 하고, 상속받는 클래스를 파생 클래스라 한다.
tabtenn0.h 예제
#ifndef TABTENNO_H
#define TABTENNO_H
#include <string>
using std::string;
// 간단한 기초 클래스
class TableTennisPlayer {
private:
string firstname; // 선수의 이름
string lastname; // 선수의 성
bool hasTable; // 탁구대를 소유하고 있는지 여부
public:
// 생성자: 매개변수에 기본값을 제공
TableTennisPlayer(const string & fn = "none", const string & ln = "none", bool ht = false);
// 이름을 출력하는 함수
void Name() const;
// 탁구대 소유 여부를 반환하는 함수
bool HasTable() const { return hasTable; }
// 탁구대 소유 여부를 설정하는 함수
void ResetTable(bool v) { hasTable = v; }
};
#endif
- 프라이빗 멤버:
- firstname: 선수의 이름을 저장하는 문자열.
- lastname: 선수의 성을 저장하는 문자열.
- hasTable: 부울 값으로, 해당 선수가 탁구대를 소유하고 있는지 여부를 나타낸다.
- 퍼블릭 멤버 함수:
- 생성자: 선수의 이름, 성, 탁구대 소유 여부를 초기화합니다. 기본값이 설정되어 있어, 매개변수를 제공하지 않으면 자동으로 "none" 및 false로 초기화된다.
- Name(): 선수의 성과 이름을 포맷에 맞게 출력한다.
- HasTable(): hasTable의 값을 반환하는 간단한 접근자 함수이다.
- ResetTable(bool v): hasTable을 업데이트하는 함수이다.
#include "tabtenn0.h"
#include <iostream>
TableTennisPlayer::TableTennisPlayer(const string & fn, const string & ln, bool ht)
: firstname(fn), lastname(ln), hasTable(ht) {} // 멤버 초기자 리스트 사용
void TableTennisPlayer::Name() const {
std::cout << lastname << ", " << firstname; // 성, 이름 순으로 출력
}
- 생성자 구현: 멤버 초기자 리스트를 사용하여 속성을 초기화한다. 이는 string 객체를 효율적으로 초기화하는 방법으로, 불필요한 복사를 피할 수 있다.
- Name() 메서드: 선수의 이름을 성과 이름 순서로 출력한다.
#include <iostream>
#include "tabtenn0.h"
int main() {
using std::cout;
TableTennisPlayer player1("Chuck", "Blizzard", true);
TableTennisPlayer player2("Tara", "Boomdea", false);
player1.Name();
if (player1.HasTable())
cout << ": 탁구대가 있다.\n";
else
cout << ": 탁구대가 없다.\n";
player2.Name();
if (player2.HasTable())
cout << ": 탁구대가 있다.\n";
else
cout << ": 탁구대가 없다.\n";
return 0;
}
- main 함수에서 두 개의 TableTennisPlayer 객체를 생성:
- player1: "Chuck"이라는 이름과 "Blizzard"라는 성을 가지며 탁구대를 소유합니다.
- player2: "Tara"라는 이름과 "Boomdea"라는 성을 가지며 탁구대를 소유하지 않습니다.
- 각 선수에 대해 이름과 탁구대 소유 여부를 출력.
- HasTable() 메서드를 통해 탁구대의 소유 여부를 확인하고, 그에 따른 메시지를 출력.
Blizzard, Chuck: 탁구대가 있다.
Boomdea, Tara: 탁구대가 없다.
- 이 예제는 상속을 통해 더 복잡한 클래스를 만드는 방법의 기초를 이해하는 데 도움이 된다. 예를 들어, TableTennisPlayer 클래스를 상속받아 특정 유형의 선수 (예: 프로 선수, 아마추어 선수 등)를 정의할 수 있다. 이러한 상속 관계는 코드의 재사용성을 높이고, 특정 기능을 확장하는 데 유리하다.
이 프로그램은 객체 지향 프로그래밍의 기본 개념인 클래스, 객체, 멤버 함수, 생성자, 상속 등을 이해하는 데 중요한 사례로, 탁구 동호회의 회원 관리 시스템을 효과적으로 표현하고 있다.
'C++' 카테고리의 다른 글
| C++ 챕터 12 (0) | 2024.09.27 |
|---|---|
| C++ 챕터 11 (0) | 2024.09.26 |
| C++ 챕터 10 (Class) (0) | 2024.09.25 |
| C++ 스터디 챕터 05~ (0) | 2024.09.24 |
| C++ 스터디 챕터 02~04 (1) | 2024.09.24 |
댓글