본문 바로가기
C & C++/윤성우의 열혈 C++ 프로그래밍

[열혈 C++] private 접근제어지시자의 정확한 범위

by 거북이 코딩 2024. 2. 20.

private

 

 private의 뜻은 클래스를 공부한 사람이라면 누구나 알고 있을 것입니다. private은 외부로부터의 접근을 제한한다는 뜻입니다. 그렇다면 접근자가 같은 클래스이지만 다른 객체라면 private 영역에 접근할 수 있을까요?

 

 답은 '그렇다'입니다. 만약 private이 같은 클래스의 다른 객체에서의 접근까지 제한한다면 복사생성자나 연산자 오버로딩을 하지 못했을 것입니다.

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;

class SimpleClass
{
private:
	int num;
public:
	SimpleClass(const SimpleClass& copy)
		:num(copy.num)    //같은 SimpleClass이지만 다른객체인 copy의 멤버에 직접 접근한다.
	{}
	SimpleClass(int NUM)
		:num(NUM)
	{}
	void ShowNum()
	{
		cout << num;
	}
};

int main(void) {
	SimpleClass sc(7);
	SimpleClass sc2 = sc;
	sc2.ShowNum();
	return 0;
}

 

마치며

 

 짧은 글이지만, 제가 이런 글을 쓴 이유는 제가 공부하다가 헷갈렸기 때문입니다. ㅎㅎ 사실 처음 복사생성자를 공부할 때는 아무 생각 없이 넘어갔지만 연산자 오버로딩을 공부하던 중에 다른 객체 멤버에 직접 접근하는 코드를 보니 갑자기 헷갈려서 머릿속이 혼란스러워졌습니다. 그래서 저처럼 갑자기 붕괴(?) 현상이 오셨을지도 모르는 분들을 위해 직접 찾아보고 이렇게 글을 작성하게 되었습니다. 도움이 되셨기를 바라며 글을 마치겠습니다. 감사합니다.