1. 용어
- 기본 클래스(base class): 상속해주는 클래스 > 부모 클래스
- 파생 클래스(derived class): 상속받는 클래스 > 자식 클래스
- 업 캐스팅(up-casting): 파생 클래스 포인터가 기본 클래스 포인터에 치환되는 것
- 다운 캐스팅(down-casting): 기본 클래스의 포인터가 파생 클래스의 포인터에 치환되는 것
※ 업 캐스팅/다운 캐스팅이 이해가 되지 않는다면 포인터의 개념을 먼저 익히기
2. 클래스 상속
- 기본 클래스의 속성과 기능을 파생 클래스에 물려주는 것
- 중복된 기능을 기본 클래스로 작성, 보다 자세한 기능은 파생 클래스로 작성
예시)
Person | Student | Worker | Programmer |
잠자기 먹기 |
잠자기 먹기 공부하기 |
잠자기 먹기 일하기 |
잠자기 먹기 일하기 코딩하기 |
2-1. 상속 선언 방법
class Student : public Person
/*
파생 클래스명: Student
상속 접근 지정: private, protected, public
기본 클래스명: Person
*/
2-2. 상속 지정
: 상속 선언 시private, protected, public 3가지 중 하나 지정
- private : 기본 클래스의 protected, public 멤버 속성을 private으로 계승
- protected: 기본 클래스의 protected, public 멤버 속성을 protected로 계승
- public: 기본 클래스의 protected, public 멤버 속성을 그대로 계승
3. 실습 문제
Q: 제시된 Circle 클래스 바탕으로 다음 코드가 실행되도록 Circle 클래스를 상속받는 NamedCircle 클래스를 작성하라.
class Circle {
int radius;
public:
Circle(int radius = 0) { this->radius = radius; }
int getRadius() { return radius; }
void setRadius(int radius) {this->radius = radius; }
double getArea() { return 3.14 * radius * radius; }
};
NamedCircle waffle(3, "waffle");
waffle.show();
// 출력 >>> 반지름이 3인 waffle
A:
(내가 작성한 코드)
다른 작성 방법과 이해 안되는 부분을 주석으로 달아놨다.
해당 질문에 대한 답은 몇주 뒤 나에게 맡긴다.
더 공부하다 돌아오면 해답을 찾을 때가 있다
#include <iostream>
using namespace std;
class Circle {
int radius;
public:
Circle(int radius = 0) { this->radius = radius; }
int getRadius() { return radius; }
void setRadius(int radius) {this->radius = radius; }
double getArea() { return 3.14 * radius * radius; }
};
class NamedCircle : public Circle {
string name;
public:
NamedCircle(int radius, string name); // 인라인으로 작성하는 방법 알고 싶음...
void show();
};
// 정확히 이해 안됨, NamedCircle의 radius 값을 Circle의 radius의 값으로 넘겨주는 것으로 이해함
NamedCircle::NamedCircle(int radius, string name) : Circle(radius) {
this->name = name;
}
void NamedCircle::show() {
cout << name << ": 반지름이 " << getRadius() << "인 원" << endl;
}
int main() {
NamedCircle Waffle(3, "waffle");
waffle.show();
}
인라인으로 작성하는 방법 확인
class NamedCircle {
string name;
public:
NamedCircle( int radius, string name) : Circle (radius) {
this->name = name;
}
}
근데... class 상속을 받았는데 멤버 함수도 상속을 받아야 하는 거시야...? ㅇㅅㅇ
'💻 프로그래밍 > C++' 카테고리의 다른 글
[C++] 오버라이딩 (0) | 2022.07.23 |
---|