ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1076) N
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (184)
      • Unreal (69)
      • Unity (104)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (350) N
      • C++ (168)
      • C# (90)
      • Java (9)
      • Python (34) N
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (10)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 파이썬
  • SQL
  • 알고리즘
  • string
  • 배열
  • 유니티
  • C++
  • 함수
  • 프로그래머스
  • 언리얼
  • 클래스
  • 그래픽스
  • 포인터
  • Unity
  • 문자열
  • c#
  • 티스토리챌린지
  • 오블완
  • C
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

C++ 클래스 접근 제한자 (Access Modifier)
프로그래밍 언어/C++

C++ 클래스 접근 제한자 (Access Modifier)

2022. 7. 27. 12:17

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
    '프로그래밍 언어/C++' 카테고리의 다른 글
    • C++ 자기 자신 참조 (this)
    • C++ 추상 클래스 / 순수 가상 함수 (Pure Virtual Function)
    • C++ 스마트 포인터 (Smart Pointer)
    • C++ 바이트 패딩 (Byte Padding)
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바