2010-03-24 144 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

注意:這不是多重繼承 - 它只是鏈中的單一繼承。 – 2010-03-24 22:02:37

回答

2

您已聲明get_number爲公開,所有類都可以看到它。

0

如果你想class result到沒有數據成員直接訪問roll_number你需要的class test繼承訪問更改爲protected

class test : protected student 
{ 
}; 

欲瞭解更多信息,請參閱The C++ FAQ Lite: Public and Private Inheritance。更改class testclass student繼承的方式也影響class student中的數據成員如何通過從class test派生的類訪問。

繼承的替代方法是對class test到包含專用指針的class student一個實例,只要class student不是一個抽象類