혼란

2012-08-30 4 views
0
내가 다음 클래스가

가정합니다혼란

class Test 
{ 
      int num; 
    public: 
      Test(int x):num(x){} 
      Test(const Test &rhs):num(rhs.num+1){} 
}; 

int main() 
{ 
     Test test(10); 
     Test copy = test; 
} 

복사의 num11해야하고, 내 질문은 복사 생성자 내부에 관하여이다, 왜 우리는 private 멤버에 액세스 할 수 있습니다 num을 사용하여 복사본의 num을 초기화 하시겠습니까? 나 혼란 스러우면 cout<<test.num<<endl을 타이핑하면 개인 num에 액세스하려고하기 때문에 물론 잘못된 것입니다. 그러나 복사 생성자에 대한 참조로 테스트를 통과하면 아무도 나에게 무슨 일이 일어나는지 말해 줄 수 없습니다 ?

+0

, "cout << test.num << endl"과 같이 입력하면 혼란 스럽습니다. 물론 private num에 액세스하려고하기 때문에 잘못되었지만 사본을 참조하여 테스트를 통과하면 생성자, 작동, 아무도 나에게 whay가 여기에 계속한다고 말해 줄 수 있습니까? 내 영어가별로 좋지 않아서, 당신들이 내가하는 말을 이해할 수 있기를 바랍니다. – user1629199

+0

영어가 훌륭하지는 않지만 요점을 이해하기에 충분합니다. 네가 나에게 묻는다면, 나는 문장을 더 짧게 유지하려고 노력할 것이고 같은 지점을 여러 번 거치지 않을 것이다. 또한, 질문에 코드를 작성할 때 뒤에 틱 (tick)으로 둘러싸면 \'코드로 서식을 지정하여 이스케이프 처리합니다 (파서가'

+0

제안 해 주셔서 감사합니다. 내 영어 실력을 향상시키고 모든 것을 배우려고 노력하고 있습니다 – user1629199

답변

5

비공개 멤버는 클래스 자체에 대한 비공개이며 클래스 인스턴스에는 해당되지 않습니다.

3

액세스 제한은 개체별로가 아니라 클래스 별입니다.

"비공개"는 동일한 클래스 내에서만 액세스 할 수 있다는 것을 의미합니다.

"보호 된"은 동일한 클래스 내에서 액세스 할 수 있으며 파생 클래스 내에서 액세스 할 수 있음을 의미합니다 (파생 클래스에서 보호 된 비 정적 멤버는 파생 클래스 유형이있는 변수를 통해서만 액세스 할 수 있음) .

"공개"는 - 무엇이든 액세스 할 수 있음을 의미합니다.

액세스 제한 지점은 값을 사용하지 못하도록 코드를 중지하는 대신 값을 사용하는 위치를 이해하기 위해 검사해야하는 코드 영역을 제한하는 것입니다.

1

private은 개체 인스턴스에 대한 비공개를 의미하지 않습니다. 그것은 클래스에 대한 비공개를 의미합니다. T 클래스의 인스턴스는 다른 인스턴스 T의 개인 멤버에 액세스 할 수 있습니다. 마찬가지로 T 클래스의 정적 메서드는 T 인스턴스의 개인 멤버에 액세스 할 수 있습니다.

private 개별 인스턴스에만 액세스가 제한되어 있으면 개체가 복사 할 수 없게됩니다. 왜냐하면 복사 생성자가 원본 인스턴스의 데이터를 읽을 수 없기 때문입니다.