2012-01-25 2 views
3

상속으로 인 캡슐 레이션이 중단된다는 것을 읽었습니다 (Scott Myers). 데이터/내부 메소드가 private (보호되지 않음) 인 경우, 캡슐화가 해제 되었습니까?상속은 C++에서 캡슐화를 중단합니까

class Vehicle 
{ 
    int color; 

public: 
    void set_color(); 
    int get_color(); 
} 


class Car: public Vehicle 
{ 
public: 
    void change_tires(); 
} 

내가 아는 지금까지 자동차를 파괴하지 않고 차량의 내부를 변경할 수 있습니다, 맞습니까?

답변

2

"상속 중단 캡슐화"와 같은 문구는 종종 문맥에서 추출됩니다.

이 구문이 의미하는 것은 상속 된 가상 인터페이스가 이제 캡슐화되지 않는다는 사실입니다. 실제로 상속이란 숨겨진 특정 사물이 노출되어 있음을 의미합니다. protected 회원과 virtualprivate 회원과 같은 것들은 모두 파생 클래스에 의해 공개됩니다.

Non-virtualprivate 회원은 아직 숨겨져 있습니다.

+0

** 가상 개인 회원에 대해 자세히 설명해 주실 수 있습니까? ** * 모두 파생 클래스 *로 게임을 시작할 수 있습니까? –

0

글쎄, 스콧 마이어스가 말한 것을 알지 못한다. 그러나 어쨌든, 당신이 지정한 방식대로하면, 자동차 메소드는 차량 공용 메소드와 속성에만 액세스 할 수있다. object (보호 된 메서드 및 속성이 없음)이므로 기본 클래스가 올바르게 캡슐화되지 않은 경우에만 여기에 캡슐화가 중단되지 않습니다. int color는 private (클래스 속성 및 함수는 지정되지 않은 경우 private)이므로 set_color (...) 메서드를 사용하여 Car 색상 만 변경할 수 있습니다.

관련 문제