2010-03-24 146 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不是一个抽象类