본문 바로가기
Programming/C, C++

LV3 C++ 접근지정자

by Dev_카페인 2022. 9. 21.
반응형

[lv3/C++] 접근지정자

 

접근지정자는 클래스의 멤버 변수나 멤버 함수들의 접근 권한을 설정하는 키워드이다. 3가지(private, protected, public) 키워드가 있으며 각각 접근할 수 있는 범위가 다르다.

 

private

- 클래스 자신 및 친구(friend)라 선언한 클래스만 접근 가능

- private로 선언된 경우 자신의 멤버 함수 내부에서 멤버 변수들을 사용할 수 있다.

- friend로 선언된 "함수"나 "클래스"는 private로 선언된 변수나 함수를 접근할 수 있다.

 

protected

- 클래스 자신 및 파생 클래스(자식 클래스)만 접근 가능

- protected로 선언된 경우 자신의 멤버 함수 내부에서 멤버 변수들을 사용할 수 있다.

- 상속받은 자식클래스의 경우도 멤버 함수 내에서 접근 가능하다.

 

public

- main()함수를 포함한 모든 클래스가 접근 가능

 

#include <iostream>

using namespace std;

// 메인 클래스 (부모클래스)
class MainClass {
private :
	int secret = 10;
protected :
	int control = 20;
public :
	int share = 30;
	void GetMainClassValue() {
		cout << "Private : " << secret << endl;		// 접근 가능
		cout << "Protected : " << control << endl;	// 접근 가능
		cout << "public : " << share << endl;		// 접근 가능
	}

	friend class FriendClass;	// 친구 선언
	// friend void FriendFunction() // friend 선언시 외부 함수도 private에 접근 가능
};

// 친구 클래스
class FriendClass {
public :
	void GetMainClassValue() {
		MainClass mainClass;
		cout << "Private : " << mainClass.secret << endl;		// 접근 가능
		cout << "Protected : " << mainClass.control << endl;	// 접근 가능
		cout << "public : " << mainClass.share << endl;		// 접근 가능
	}
};

// 자식 클래스
class ChildClass : public MainClass {
public :
	void GetMainClassValue() {
		MainClass mainClass;
		cout << "Private : " << endl;		// secret 접근 불가
		cout << "Protected : " << control << endl;	// 접근 가능
		cout << "public : " << share << endl;		// 접근 가능
	}
};

int main()
{
	cout << "Main Class" << endl;
	MainClass mainClass;
	mainClass.GetMainClassValue();
	cout << "---------------------" << endl;

	cout << "Friend Class" << endl;
	FriendClass friendClass;
	friendClass.GetMainClassValue();
	cout << "---------------------" << endl;


	cout << "child Class" << endl;
	ChildClass  childClass;
	childClass.GetMainClassValue();
	cout << "---------------------" << endl;
	
	system("pause");
	return 0;
}

 

반응형