728x90
[Do it C++ 완전정복_ 289~298 p]
부모클래스 접근 지정자
상속 시, 부모 클래스의 멤버 접근 수준이 자식 클래스에서 어떻게 바뀌는지를 결정하는 지정자
class 자식클래스 : [public / protected / private] 부모클래스
상속 접근 지정자에 따른 멤버 접근 변화
| 상속 방식 | 부모의 public 멤버 | 부모의 protected 멤버 | 부모의 private 멤버 | 외부 접근 가능 여부 |
| public 상속 | 자식에서도 public | 자식에서도 protected | 접근 불가 | 부모의 public 멤버 접근 가능 |
| protected 상속 | 자식에서 protected | 자식에서 protected | 접근 불가 | 외부 접근 불가 |
| private 상속 | 자식에서 private | 자식에서 private | 접근 불가 | 외부 접근 불가 |
여기서 질문!
상속 접근 지정자를 private 설정시, 부모 접근 지정자가 자식 클래스에서 private 으로 적용된다고 하였다.
private 상속이면 자식도 못 쓰는 거 아닌가?
private 상속이더라도 자식 클래스 내부에서는 부모의 public / protected 멤버 접근 가능하다.
단, 외부에서는 부모 멤버에 접근할 수 없게 된다.
상속 접근 지정자 private 설정 예시
#include <iostream>
using namespace std;
class Parent {
public:
int a = 1;
protected:
int b = 2;
private:
int c = 3;
};
class Child : private Parent {
public:
void show() {
cout << a << " " << b << endl; // 가능 (부모 public/protected 접근 가능)
// cout << c; // private은 접근 불가
}
};
int main() {
Child obj;
// cout << obj.a; // 불가능: private 상속으로 외부 접근 차단
obj.show();
}
프렌드(friend) 함수와 클래스
프렌드 함수
클래스 외부의 함수가 클래스 내부의 private/protected 멤버에 접근할 수 있도록 허용하는 함수.
선언 시 friend 키워드를 사용한다.
friend로 선언된 함수는 클래스의 멤버 함수가 아님에도 private 멤버에 접근 가능
class Box {
private: int w;
public: Box(int x):w(x){} friend void show(Box b);
};
void show(Box b){ cout << b.w; } // 접근 가능
프렌드 클래스
특정 클래스 전체를 다른 클래스의 friend로 지정하면, 그 클래스의 모든 private/protected 멤버에 접근할 수 있다.
class Car {
private: int speed=100;
friend class Mechanic;
};
class Mechanic {
public: void tune(Car c){ cout << c.speed; }
};'C++ > C++ 문법' 카테고리의 다른 글
| C++ 가상 함수와 추상 클래스, 인터페이스 (0) | 2025.10.14 |
|---|---|
| C++ 다중 상속의 단점과 보완(컴포지션, 어그리게이션) (0) | 2025.10.14 |
| C++ 오버로딩 (Overloading) (0) | 2025.10.14 |
| C++ 멤버 함수와 this 포인터 (0) | 2025.10.14 |
| C++ 생성자와 복사생성자, 소멸자 (0) | 2025.10.14 |