2010-03-24 5 views
0

우리가 "보호 된 것으로 선언 된 회원은 즉시 파생 된 모든 클래스에 액세스 할 수 있습니다"라고 말할 때 이것이 의미하는 바가 무엇입니까? 다음 예에서 get_number 함수는 결과 클래스에서 액세스 할 수 있습니다.이 클래스는 테스트 클래스에 액세스 할 수있는 문에만 사용할 수 있습니다.다중 상속

class student 
{  
protected: 
    int roll_number;   
public: 
    void get_number(int){ cout<< "hello"; } 
    void put_number(void) {cout<< "hello"; } 
}; 

class test : public student 
{ 
protected: 
    float sub1; 
    float sub2; 
public:  
    void get_marks(float, float) {cout<< "hello"; roll_number = 10; }  
    void put_marks(void) {cout<< "hello"; cout << "roll_number = " << roll_number ; } 
}; 

class result : public test 
{ 
    float total; 
public: 
    void display(){cout<< "hello"; roll_number = 10; } 
}; 

int main() 
{ 
    result student; 
    student.get_marks(2.2, 2.2); 
    student.put_marks(); 
    return 0; 
} 

보호 된 변수 roll_number가 결과 클래스에 액세스 할 수없는 첫 번째 명령문에 따라 코드가 변경 되었습니까?

+1

참고 : 이것은 다중 상속이 아니며 체인의 단일 상속 일뿐입니다. –

답변

2

get_number을 공개로 선언 했으므로 모든 클래스에서 볼 수 있습니다.

0

당신이 class result 당신이 protectedclass test의 상속 액세스 권한을 변경해야 할 roll_number 데이터 멤버에 직접 액세스하지 않도록하려면 : 자세한 내용은

class test : protected student 
{ 
}; 

The C++ FAQ Lite: Public and Private Inheritance를 참조하십시오. class testclass student에서 상속되는 방식을 변경하면 class student의 데이터 멤버가 class test에서 파생 된 클래스에 의해 액세스되는 방식에도 영향을줍니다. class student는 추상 클래스 아니므로 class test만큼 class student, 의 인스턴스에게 개인 포인터를 포함하는

상속에 대한 대안입니다.