我正在为即将进行的测试查看一些示例问题,这个问题让我很困惑.
请考虑以下代码:
class GraduateStudent : public Student
{
...
};
Run Code Online (Sandbox Code Playgroud)
如果省略"public"这个词,则GraduateStudent使用私有继承,这意味着下列哪一项?
GraduateStudent对象可能不使用的方法Student.
GraduateStudent无法访问私有对象Student.
没有方法GraduateStudent可以调用方法Student.
只有const方法GraduateStudent可以调用方法Student.
Tyl*_*nry 22
虽然这是一个简单的家庭作业问题,但我会回答它,因为这是一个可怕的问题.我几乎认为这是一个棘手的问题,而且它并没有真正对知识进行良好的测试.
答案是2. GraduateStudent无法访问Student的私人对象.除了这与私有继承没有任何关系.无论public关键字是否存在,第2点都是正确的,因为派生类永远不能访问其基类的私有成员,无论它们如何继承.
私有继承本质上意味着两件事(而不是公共继承):
所有公共方法Student成为私人方法GraduateStudent.这意味着,例如,如果Student有一个公共方法foo(),那么GraduateStudent有一个私有方法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;
};
Run Code Online (Sandbox Code Playgroud)