C++에서 개인 및 보호 클래스 멤버 사용
-
private
속성을 사용하여 C++에서 클래스의 사용자가 액세스 할 수없는 클래스 멤버를 나타냅니다 -
protected
속성을 사용하여 파생 클래스 또는 친구 클래스의 멤버 함수에 액세스 할 수있는 클래스 멤버를 나타냅니다
이 기사는 C++에서private
대protected
클래스 멤버를 올바르게 사용하는 방법에 대한 여러 방법을 보여줍니다.
private
속성을 사용하여 C++에서 클래스의 사용자가 액세스 할 수없는 클래스 멤버를 나타냅니다
private
키워드는 캡슐화 기능을 구현하는 C++ 언어의 기본 부분 중 하나입니다. 캡슐화의 주요 목표는 클래스 사용자를위한 강제 인터페이스를 만들고 특정 멤버로만 직접 액세스를 제한하는 것입니다. 클래스 인터페이스를 정의한다는 것은 클래스 사용자가 데이터 멤버를 직접 수정하거나 액세스 할 필요가없고 주어진 개체에 대해 이러한 작업을 수행하도록 설계된 공용 메서드를 호출 할 필요가 있음을 의미합니다.
액세스 제어에는 일반적으로 public
, private
및 protected
의 세 가지 키워드가 있습니다. 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
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