通过在基类

时间:2018-04-13 02:45:45

标签: c++ virtual handle protected friend-class

在阅读 accelerated c ++ 的第13章时,我想到了这个问题。

这个问题涉及三个类,例如课程Core,课程Grade和课程Student_InfoCore是基类。 Grade是从Core继承的派生类。 Student_info是句柄类。

为了定义Student_info的复制构造函数,我们需要在类clone中使用虚拟Core函数,我们还需要在类Grade中重新定义它。这两个函数都在protected标签下。要访问clone的受保护Core函数,必须将句柄类Student_Info指定为Core的朋友类。

但是,它表示我们不需要指定Student_Info作为Grade的朋友来访问其克隆功能,因为我们只能通过对Core::clone的虚拟调用来访问它。我真的很困惑。我不知道Student_Info如何访问Grade的{​​{1}}功能。如果cp(类型clone)指向类Core*的对象,为什么Grade可以工作?有些人可以详细说明一下吗?

代码的相关部分:

s.cp->clone()

2 个答案:

答案 0 :(得分:1)

Student_infoCore的朋友,因此可以访问Core::clone()。这就是s.cp->clone()有效的原因。动态调度的调用是内部的,不相关的。

动态调度调用的方法不能先验地(静态地)知道。编译器不知道它,更不用说检查它的访问修饰符了。

答案 1 :(得分:0)

私人保护和公共保护命名事物的方式,而不是事物本身。

您正在命名基类克隆;您只需要通过该名称访问它的权限。事实上它实际上是别的东西是不相关的。