상속과 접근제어
상속(Inheritance)
부모가 자식에게 상속하면, 부모의 멤버들을 전부 사용하고, 자식만의 고유한 멤버를 추가로 가질 수 있다
포함관계 : 부모가 자식을 포함하는 관계
남자 ) 총각 이듯이 부모 ) 자식이다.
자식이 부모한테 포함되는거고, 부모의 멤버가 자식의 멤버에 포함되는 것이다.
#include <iostream>
using namespace std;
class Base {
public:
void bFunc() {
cout << "Hello!" << endl;
}
int bNum;
};
- 자식 클래스(파생 클래스) 뒤에 콜론 ":"을 붙인 뒤 접근제어자와 부모 클래스를 적어준 뒤 선언하면 된다
class Derived : public Base { // Base를 부모로 하는 클래스
public:
void dFunc() {
cout << "Hello?" << endl;
}
int dNum;
};
int main(void) {
Base b;
Derived d;
b.bFunc();
b.bNum = 1;
d.bFunc();
d.bNum = 2;
d.dFunc();
d.dNum = 3;
}
접근 제어
접근 제어 지시자
private : 클래스 내부에서만 접근 가능. 클래스 외부에서는 접근 불가
public : 클래스 내부, 외부에서 모두 접근 가능
그리고 자식 클래스에서의 접근 제어를 위해서 protected 라는게 등장한다
public : 외부 접근 O 자식클래스 o
protected : 외부 접근 x 자식클래스 o
private : 외부 접근 x 자식클래스x
#include <iostream>
using namespace std;
class Base {
public:
int bPublic;
protected:
int bProtected;
private:
int bPrivate;
};
class Derived : public Base { // 왜 public을 붙이는지는 아래에서 다룸
public:
int dPublic;
void DFunc() {
bPublic = 1;
bProtected = 2;
// bPrivate는 접근이 불가능함.
dPublic = 4;
dPrivate = 5;
}
private:
int dPrivate;
};
bPrivate는 부모에서 private로 선언되어 접근이 불가능함
부모 클래스의 private을 제외하곤 자식 클래스에서 접근이 가능하다
int main(void) {
Base b;
Derived d;
b.bPublic = 1;
// b.bProtected X
d.bPublic = 1;
// d.bPrivate, d.bProtected x
d.dPublic = 1;
}
- 이 부분을 다시 살펴보자
class Derived : public Base { // Protected Base의 경우 Protected 보다 더 공개된 멤버들을 Protected 공개수준으로 낮춤.
// Private Based의 경우 public이랑 protected 가 privated 공개수준으로 바뀜.
자식이 public으로 상속 받으면 부모의 public을 public 그대로 상속받는다.
부모의 protected와 private는 자식에게 동일하게 protected, private로 상속된다
일반적으로 대부분 경우 public으로 상속을 받음
자식이 protected으로 상속 받으면 부모의 public을 protected 수준으로 상속받는다.
자식이 private으로 상속 받으면 부모의 public, protected를 private 수준으로 상속받는다.
'Programming Language > C++' 카테고리의 다른 글
[C++] 오버라이딩(Overriding)과 정적 바인딩(Static Binding) (0) | 2024.06.27 |
---|---|
[C++] 상속이 필요한 이유(1) (0) | 2024.06.27 |
[C++] Implicit Conversion(묵시적 형변환) (0) | 2024.06.27 |
[C++] 이동 시맨틱(Move Semantics): 이동 생성자, 이동 대입 연산자 (0) | 2024.06.27 |
[C++] 대입 연산자 오버로딩 (0) | 2024.03.12 |