我正在为即将进行的测试准备一些示例性问题,而这个问题使我完全感到困惑。
考虑以下代码:
class GraduateStudent : public Student
{
...
};
如果省略了“public”一词,则
GraduateStudent
使用私有(private)继承,这意味着以下哪一项?GraduateStudent
对象不能使用Student
的方法。 GraduateStudent
无权访问Student
的私有(private)对象。 GraduateStudent
的任何方法都不能调用Student
的方法。 const
的GraduateStudent
方法可以调用Student
的方法。 最佳答案
尽管这是一个纯粹的家庭作业式问题,但我将回答它,因为这是一个可怕的问题。我几乎会认为这是一个棘手的问题,它实际上并不能很好地检验知识。
答案是2。GraduateStudent无权访问Student的私有(private)对象。 ,除了与私有(private)继承完全无关。无论是否存在public
关键字,第2点都是正确的,因为无论它们如何继承,派生类都永远无法访问其基类的私有(private)成员。
私有(private)继承本质上意味着两件事(与公共(public)继承相反):
Student
的所有公共(public)方法在GraduateStudent
中成为私有(private)方法。这意味着,例如,如果Student
具有公共(public)方法foo()
,则GraduateStudent
具有私有(private)方法foo()
。 GraduateStudent
从Student
私下继承,那么您就无法将GraduateStudent*
视为Student*
(或者将GraduateStudent&
视为Student&
)。 问题的作者也有可能也将第1点当作是正确的答案,但措辞含糊。 “
GraduateStudent
对象不能使用Student
方法”是什么意思?这样做的意图可能是意味着您不能像我在上面的第一点中所写的那样,在Student
类型的对象上调用从GraduateStudent
继承的方法,但是GraduateStudent
对象本身可以在其方法内使用Student
的方法。例如:
class Student {
public:
void foo() {};
};
class GraduateStudent : Student {
public:
void bar()
{
foo(); // Legal
}
};
int main() {
GraduateStudent g;
g.bar(); // Legal
g.foo(); // Illegal
return 0;
};
关于c++ - C++中的简单继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2929840/