일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 정보처리산업기사
- programmers
- softeer
- SW봉사
- BFS
- 알고리즘
- 문제풀이
- 백준알고리즘
- 1과목
- 코틀린
- python
- 파이썬
- CJ UNIT
- 공부일지
- 소프티어
- MYSQL
- 코딩교육봉사
- 백준 알고리즘
- C++
- 회고
- 시나공
- 코딩봉사
- 데이터베이스
- 프로그래머스
- SQL
- 백준
- java
- kotlin
- 자바
- 스프링
- Today
- Total
JIE0025
[ C++ ] 상속 본문
상속
클래스에서의 상속은 자기자신의 멤버를 물려주는것.
멤버변수와 멤버함수 모두 물려준다.
상속해주는 클래스 : 기초, 슈퍼, 부모 클래스
상속받는 클래스 : 유도, 서브, 자식 클래스
- 부모의 모든 멤버를 자식이 물려받음
- 모든 멤버를 자식이 물려받지만 완전히 자식의 소유는 아니다.
상속
자식 클래스 : 부모 클래스
예제 코드를 보면서 이해해보자.
Parent 클래스와
Parent를 상속받는 Child 클래스가 있다.
#include<iostream>
using namespace std;
class Parent {
int x, y;
public:
Parent(const int& a, const int& b) {
cout << "Parent 생성 \n";
x = a;
y = b;
}
~Parent() {
cout << "Parent 소멸 \n";
}
int getX() const { return x; }
int getY() const { return y; }
void setX(const int& a) {
x = a;
}
void setY(const int& b) {
y = b;
}
};
class Child :public Parent {
int z;
public:
Child(const int& a, const int& b, const int& c) :Parent(a,b){
cout << "Child 생성 \n";
z = c;
}
~Child() {
cout << "Child 소멸 \n";
}
void printAll()const {
cout << "z : " << z << '\n';
cout << "x :" << getX() << " y : " << getY() << "\n";
}
};
int main() {
Child c(1, 3, 5);
c.printAll();
return 0;
}
- Child 클래스 내부에선 public 한 친구들까지 자유자재로 사용가능 하다.
- Parent 의 private는 Parent의 멤버 함수로만 접근 가능하다.
- 자식 클래스만 초기화 할 경우 자식은 부모 멤버의 초기화해야하는 의무가 있다.
- main에서 Child를 만들었지만 Parent의 생성자가 먼저 호출되고 Child 생성자가 이후에 호출되는것을 볼 수 있다.
- Child 생성자에서 : Parent(a,b) 를 넣어줌으로써 (이니셜라이저 사용해 생성자 호출 명시) Parent의 생성자로 a와 b값을 전달, x와 y에 먼저 값이 할당된다.
>> 여기에서 Parent 생성이 호출됨.
- 이후 Childe 생성자 내부가 작동 >> Child 생성 출력후 z = c;가 작동한다.
- Parent의 public 한 멤버함수 getX와 getY를 통해 Child에서 x와 y의 값을 읽을 수 있다.
- 소멸은 Child 먼저, Parent가 나중에 되는 것을 확인 할 수 있다. (객체의 소멸순서는 생성순서와 반대)
protected?
접근제어자 protected를 사용한 멤버변수는 이를 상속하는 유도클래스(자식)에서 접근이 가능하다
- class Child : public Parent
>> public으로 상속받았다는 뜻
>> 어떤 접근제어자로 상속받았을 때 더 넓은 공개 범위를 가지는 멤버를 public으로 만들라는 뜻이다.
만약 private로 상속받으면 public protected 한 멤버까지 private한 멤버로 바꿔준다.
만약 protected로 상속받으면 public한 멤버를 protected로 바꿔주며, private는 바로 접근할 수 없다.
실제로 public 상속 이외의 상속은 다중상속과 같이 특별한 케이스가 아닐 경우 잘 사용하지 않는다.
상속은 IS-A 관계
무선전화기는 일종의 전화기이다. O
자식 is a 부모
상속관계가 성립하기 위해 부모와 자식간의 IS-A 관계가 성립해야한다.
만약 묶으려는 두 클래스가 IS-A 관계가 성립 X 라면 적절한 상속의 관계가 아니다.
HAS-A 관계
경찰이 권총을 소유하고 있다.
경찰 - 자식클래스
권총 - 부모클래스
경찰 has a 권총
이 경우에도 상속으로 표현할 수 있다.
'기타 학습 > Language' 카테고리의 다른 글
[Python] 얕은 복사, 깊은 복사 (0) | 2022.05.28 |
---|---|
[ C++ ] sort , stable_sort (0) | 2022.05.20 |
[ C++ ] 삼각형의 성립 조건 (0) | 2022.05.20 |
[ C++ ] 충돌 알고리즘 (0) | 2022.05.20 |
[ C++ ] 문자열을 숫자로 (stoi, stof, stol, stod) (0) | 2022.05.19 |