public, private, protected 바로 이 3가지이고 쓰여지는 이유는 객체지향 프로그래밍의 중요한 개념 중 하나는 데이터 숨김(은닉) 때문이다.
클래스 내에 멤버에 대한 접근 제한자를 두지 않으면 기본적으로 private이다.
구조체 멤버에 대한 기본적인 접근 제한자는 public이다.
friend 키워드는 private와 protected의 원칙을 깨트림으로서 코드의 직관성과 흐름 파악을 복잡하게하는 goto같은 존재이다. friend 관련 글 참고
public
public으로 선언된 데이터 멤버 및 멤버함수는 . 연산자를 사용하여 프로그램의 아무곳에서나 액세스 할 수 있다.
private
클래스 멤버를 private으로 선언하면 해당 멤버는 오직 클래스 내부에서 접근할 수 있다, 외부의 모든 객체나 함수에서 직접 접근할 수 없다.
protected
private와 비슷하지만 상속받은 클래스 내부에서만 접근할 수 있도록 한다.
#include <iostream>
using namespace std;
class Parent
{
int mVal;
public:
float mFVal;
protected:
virtual void Print() = 0;
};
class Child : public Parent
{
public:
// 원본은 protected이지만 외부에서 접근하기 위해선 public으로 변경해야됨.
virtual void Print() override
{
cout << "Child 클래스" << endl;
}
};
int main()
{
Parent* pParent = new Child();
// mVal은 private 멤버 변수, 접근 불가.
pParent->mVal = 10;
// public 멤버 변수 접근 가능
pParent->mFVal = 10.5f;
// protected 멤버 함수 접근 불가
pParent->Print();
Child child;
// private 멤버 변수 접근 불가
child.mVal = 20;
// public 멤버 변수 접근 가능
child.mFVal = 20.5f;
// public 멤버 함수 접근 가능
child.Print();
delete pParent;
return 0;
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 자기 자신 참조 (this) (0) | 2022.07.28 |
---|---|
C++ 추상 클래스 / 순수 가상 함수 (Pure Virtual Function) (0) | 2022.07.28 |
C++ 스마트 포인터 (Smart Pointer) (0) | 2022.07.26 |
C++ 바이트 패딩 (Byte Padding) (0) | 2022.07.26 |
C++ 참조 대상 수 (Reference Counting) (0) | 2022.07.24 |