C++에서 개인 및 보호 클래스 멤버 사용

Jinku Hu 2023년10월12일
  1. private 속성을 사용하여 C++에서 클래스의 사용자가 액세스 할 수없는 클래스 멤버를 나타냅니다
  2. protected속성을 사용하여 파생 클래스 또는 친구 클래스의 멤버 함수에 액세스 할 수있는 클래스 멤버를 나타냅니다
C++에서 개인 및 보호 클래스 멤버 사용

이 기사는 C++에서privateprotected 클래스 멤버를 올바르게 사용하는 방법에 대한 여러 방법을 보여줍니다.

private 속성을 사용하여 C++에서 클래스의 사용자가 액세스 할 수없는 클래스 멤버를 나타냅니다

private 키워드는 캡슐화 기능을 구현하는 C++ 언어의 기본 부분 중 하나입니다. 캡슐화의 주요 목표는 클래스 사용자를위한 강제 인터페이스를 만들고 특정 멤버로만 직접 액세스를 제한하는 것입니다. 클래스 인터페이스를 정의한다는 것은 클래스 사용자가 데이터 멤버를 직접 수정하거나 액세스 할 필요가없고 주어진 개체에 대해 이러한 작업을 수행하도록 설계된 공용 메서드를 호출 할 필요가 있음을 의미합니다.

액세스 제어에는 일반적으로 public, privateprotected의 세 가지 키워드가 있습니다. public 속성 뒤에 정의 된 멤버는 클래스의 모든 사용자가 액세스 할 수 있습니다. 반면 private지정자는 클래스의 멤버 함수로만 액세스 할 수있는 멤버를 정의합니다. 다음 예에서main 함수의 코드는CustomString 유형의 변수를 선언 할 수 있지만 멤버str에 액세스하려면 코드가public 속성으로 정의 된getString 메서드를 호출해야합니다.

#include <iostream>
#include <string>
#include <utility>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

class CustomString {
 public:
  CustomString() = default;
  explicit CustomString(const string& s) : str(s) { num = s.size(); }

  virtual ~CustomString() = default;

  string& getString() { return str; };

 private:
  string str;

 protected:
  int num{};
};

int main() {
  CustomString str1("Hello There 1");

  cout << "str1: " << str1.getString() << endl;

  exit(EXIT_SUCCESS);
}

출력:

str1: Hello There 1

protected속성을 사용하여 파생 클래스 또는 친구 클래스의 멤버 함수에 액세스 할 수있는 클래스 멤버를 나타냅니다

액세스 제어에 사용할 수있는 또 다른 키워드는 클래스 멤버 함수, 파생 클래스 멤버 및 친구 클래스에 액세스 할 수 있도록 선언 된 멤버를 만드는protected속성입니다. 이후의 두 멤버는 기본 클래스 개체에서 직접 ‘보호 된’멤버에 액세스 할 수없고 파생 클래스 개체에서 액세스 할 수 없습니다. 다음 예제는CustomString에서 파생 된CustomSentence 클래스를 보여 주지만 후자 클래스의num 멤버는protected 멤버입니다. 따라서CustomString 개체에서 액세스 할 수 없습니다. 즉,getSize 함수는CustomString 클래스의 일부가 아니며CustomSentence 객체 만 메서드를 호출하여num 값을 가져올 수 있습니다.

#include <iostream>
#include <string>
#include <utility>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

class CustomString {
 public:
  CustomString() = default;
  explicit CustomString(const string& s) : str(s) { num = s.size(); }

  virtual ~CustomString() = default;

  string& getString() { return str; };

 private:
  string str;

 protected:
  int num{};
};

class CustomSentence : public CustomString {
 public:
  CustomSentence() = default;
  explicit CustomSentence(const string& s) : sent(s) { num = s.size(); }
  ~CustomSentence() override = default;

  int getSize() const { return num; };
  string& getSentence() { return sent; };

 private:
  string sent;
};

int main() {
  CustomString str1("Hello There 1");
  CustomSentence sent1("Hello There 2");

  cout << "str1: " << str1.getString() << endl;
  cout << "sent1: " << sent1.getSentence() << endl;
  cout << "size: " << sent1.getSize() << endl;

  exit(EXIT_SUCCESS);
}

출력:

str1: Hello There 1
sent1: Hello There 2
size: 13
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Class