2012-05-01 6 views
1

저는 C++을 정말 오랜 시간 사용하지 않았습니다.이 질문은 어리 석으나 실제로 도움이 될 수 있습니다.C++의 기본 클래스 개인 멤버에 액세스

내 기본 클래스에 개인 데이터 멤버가 있고 파생 클래스가 공개 된 경우 기본 클래스의 전용 멤버는 상속되지 않습니다. 그러나 상속 된 공용 함수를 통해 액세스 할 수 있습니다. 예 : 다음과 같이

class B{ 
int a,b; 

public: 
void SetA(int); 
int GetA(); 
}; 

class D:public B{ 

public: 
SetAAttribute(int x) 
{ SetA(x); } 

} 

지금, 내 질문은 : 기술적으로는, 파생 클래스 객체가 그들에 정의 된 '는'속성이 없습니다. 평범한 용어로, 애트리뷰트가 첫 번째 위치에 존재하지 않을 때 기본적으로 엔티티에 속성을 설정하고 있습니다. 그런 개념을 상상하기는 쉽지 않습니다. 나는 이것을 정확하게 이해 했는가?

추가 설명이나 수정을 부탁드립니다.

+0

'a'속성이있는 경우 비공개이므로 직접 액세스 할 수 없습니다. –

+0

기본 클래스 멤버를 상속되도록 'protected'로 설정할 수 있지만 그렇지 않은 경우에는 private 속성을 가질 수 있습니다. – chris

답변

7

속성이 더 이상 존재하지 않는 것은 아닙니다. 단지 숨겨진 것일뿐입니다. 기본 클래스 메서드는 서로간에 숨겨져 있지 않기 때문에 기본 클래스 멤버에 계속 액세스 할 수 있습니다.

+0

특성은 기본 클래스 개체에 정의되어 있습니까? 파생 클래스에 대해이 특성을 설정하면 실제로 존재하지 않습니다. 사적인 구성원은 결코 계승되지 않으므로 그들이 숨겨져있는 것은 아닙니다. 예 : 'color'가 private 기본 클래스 속성이고, 파생 된 객체가 public 상속 된 함수를 통해 color 속성을 설정하면 파생 객체에 대해 설정됩니까? – Bugaboo

+0

@Bugaoo, 개인 회원은 상속되지만 내가 말했듯이 그들은 숨겨져 있습니다. 그것들을 사용하려고하면 컴파일러는 마치 존재하지 않는 것처럼 불평 할 것입니다. 그러나 그들은 여전히 ​​거기에 있습니다. 'sizeof'를하면 크기가 숨겨진 멤버를 포함하고 있음을 알 수 있습니다. color 속성을 설정하고 기본 클래스가 객체 그리기를 담당하면 파생 클래스에서 설정된 색상으로 그 객체를 그립니다. –

+0

고맙습니다. 도움이됩니다. 추가적인 후속 질문. 솔루션을 설계 할 때 속성을 비공개로 유지하고 공용 상속 된 함수를 통해 속성에 액세스하거나 기본 클래스에서 보호 된 속성을 표시하고 파생 클래스에서 직접 액세스 할 수 있습니까? – Bugaboo

2

개인 기본 멤버가 상속되므로 컴파일러는 직접 액세스하지 않아도되므로 액세스하려고하면 오류가 발생합니다.

관련 문제