class RatedPlayer : public TableTennisPlayer
{
....
};
- TableTennisPlayer가 public기초클래스라는 것을 나타낸다. 이것을 public 파생이라 한다.
- 파생 클래스형의 객체 안에는 기초 클래스형의 데이터 멤버들이 저장된다.
- 파생 클래스형의 객체는 기초 클래스형의 메서드들을 사용할 수 있다.
파생 클래스안에 추가해야될 것
- 파생 클래스는 자기 자신의 생성자를 필요로 한다.
- 파생 클래스는 부가적인 데이터 멤버들과 멤버 함수들을 필요한 만큼 추가할 수 있다.
파생 클래스의 접근 권한
- 파생 클래스는 기초 클래스의 private 멤버에 직접적으로 접근할 수 없다. 기초 클래스의 public메서드들을 통해서 접근해야한다.
파생 클래스의 생성자
RatePlayer::RatePlayer(unsigned int r, const char* fn, const string& ln, bool ht)
: TableTennisPlayer(fn, ln, ht)
{
rating = r;
}
- 파생 클래스는 기본적으로 기초 클래스의 생성자를 먼저 생성해야한다. 멤버 초기자 리스트를 사용하여 먼저 기초클래스의 내용을 초기화해준다.
- 기초 클래스의 생성자 호출하는 것을 생략하게 된다면 프로그램은 디폴트 기초 클래스 생성자를 사용한다.
- 기초 클래스의 디폴트 생성자를 사용하지 않을 것이라면 파생클래스에서 명시적으로 기초 클래스의 생성자를 호출해주어야 한다.
파생 클래스와 기초 클래스와의 관계
RP rplayer(1140, "MMMd", "dwd", true);
TaTn & rt = rplayer;
TaTn * pt = &rplayer;
rt.Name(); //참조를 사용하여 Name() 호출
pt->Name(); //포인터를 사용하여 Name() 호출
- 위의 경우에는 파생 클래스를 기초 클래스의 포인터와 참조로 호출하였다. 하지만 파생 클래스에 있는 기초 클래스 메서드만을 다룰 수 있다.
- 대입을 하게 된다면 아래와 같다.
RatePlayer rplayer1(33, "uk", "zzard", false); //파생클래스
TableTennisPlayer player2(rplayer1); //기초클래스
- 기초 클래스는 복사생성자로 TableTennisPlayer(const RatePlayer &);가 필요하다. 하지만 없기에 암시적인 복사생성자가 그 역할을 대신한다.
TableTennisPlayer(const TableTennisPlayer &);
TableTennisPlayer player1("Chuck", "Blizzard", true);
RatePlayer& rt = player1; //허용되지 않는다.
RatePlayer* pt = &player1; //허용되지 않는다.
- 파생클래스의 참조와 포인터에는 기초 클래스의 객체와 주소를 대입할 수 없다.
- 기초 클래스에 파생 클래스를 대입하는 것은 가능하다. 명시적으로 선언을 안 했다면 대입 연산자를 암시적으로 오버로딩 대입연산자를 사용한다.
'C++ > Basic' 카테고리의 다른 글
[C++] 다중 상속과 가상 기초 클래스 (0) | 2021.07.14 |
---|---|
[C++] public 다형 상속 (0) | 2021.07.06 |
[C++] 멤버 초기자 리스트 (0) | 2021.07.04 |
[C++] 대입 생성자 (0) | 2021.06.30 |
[C++] 복사 생성자 (0) | 2021.06.29 |