[C++] 복사생성자 질문 드립니다,
글쓴이: k3rnel / 작성시간: 수, 2006/01/04 - 1:48오후
안녕하세요
복사생성자중에 의문사항이 있습니다,
#include <iostream> using std::cout; using std::endl; class AAA { private: int val; public: AAA(int i) { val = i; } AAA(const AAA& a) { val = a.val; //<------------------여기에서 의문점 } }; void main() { AAA a(10); AAA b(a); }
위의 코드에서 복사생성자를 호출하는분에서
val= a.val 코드중에,
a.val 자체가 외부참조 아닌가요?
변수 val의 접근 권한이 private 인데 인수로 넘긴 a 객체에서 직접 a객체의 멤버변수를 외부에서 접근이 가능한가요?
이해가 잘 되지 않습니다,,
답변 부탁드릴께요 수고하세요( _)
Forums:
클래스의 멤버 함수 안에서는 private 멤버를 모두 직접 접근할 수
클래스의 멤버 함수 안에서는 private 멤버를 모두 직접 접근할 수 있습니다.
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
a.val 에서요,,a라는 객체가있는데,,,그것을 지금 외부에서
a.val 에서요,,
a라는 객체가있는데,,,그것을 지금 외부에서 참조하고있는 형태 아닌가요?
접근제어는 인스턴스레벨이 아니라 클래스 레벨로 이루어지는 것으로 알고 있
접근제어는 인스턴스레벨이 아니라 클래스 레벨로 이루어지는 것으로 알고 있습니다.
외부 인스턴스라도 같은 클래스니 상관이 없을 듯 합니다.
싱글톤의 경우도 static멤버가 private으로 되어 있는 생성자를 호출하지 않습니까 ? :)
제가 기초가 부족한관계로 이해가 되지 않습니다 ㅜㅜ보통 [co
제가 기초가 부족한관계로 이해가 되지 않습니다 ㅜㅜ
보통
위의 코드처럼 직접 참조 못하는걸로 알고있는데요,,
제가 처음에 질문드렸던,,복사생성자에서도 같은 경우가 아닌가요?
ㅜㅜ
main() 함수는 class AAA의 멤버함수가 아닙니다. 따라서 ma
main() 함수는 class AAA의 멤버함수가 아닙니다. 따라서 main() 함수에서 class AAA의 private 멤버를 접근하려고 하면 당연히 에러가 발생합니다.
위에분들이 이미 말씀하셨지만.main과 복사생성자의 위치는 상당히
위에분들이 이미 말씀하셨지만.
main과 복사생성자의 위치는 상당히 다릅니다.
main은 A 클래스의 맴버가 아니기 때문에 A의 인스턴스의 private 값들에 접근 할 수 없지만,
복사생성자는 A 클래스의 맴버이기 때문에 A의 인스턴스의 private값들에 접근이 허용됩니다.
-----------------
한글을 사랑합니다.
답변해주신분들께 감사드립니다~(_ _)이제 좀 이해가 될듯합니다,
답변해주신분들께 감사드립니다~(_ _)
이제 좀 이해가 될듯합니다,,^^
k3rnel 님과 같은 의문에 고민했던 사람들 많을걸요? :-) (적어도
k3rnel 님과 같은 의문에 고민했던 사람들 많을걸요? :-) (적어도 저는 그랬습니다 ^^;;;)
a.val 의 a 는 분명 "내 자신이 아닌 다른 객체"이지만, 어쨌거나 같은 AAA클래스이기 때문에 private이라 하더라도 접근 가능합니다.
"그럼 다른 객체가 맘대로 (set 메쏘드를 거치지 않고) 부적절한 값을 부여해 버리면 어떡하냐"라고 생각할 수도 있지만, 어차피 AAA클래스(의 객체들) 사이에서만 접근 가능한 것이니 AAA클래스를 작성하는 사람이 그런 일이 없도록 잘 코딩하면 되는거죠.
좋은 하루 되세요!
[quote="raymundo"]k3rnel 님과 같은 의문에 고민했던
저도 C++ 대충 알 적에 그걸 몰라서 삽질한 적이 있습니다. orz 참고로 자바 같은 경우에도 비슷하게 다른 클래스에 접근할 수 있게 되어 있습니다. 클래스 하나에 책임 하나라는 생각에서 보면 당연한 걸지도 모르겠네요. (자기 자신의 인스턴스는 모두 책임을 져야 하니까...)
- 토끼군
댓글 달기