父访问子项

Parent accessing child

本文关键字:访问      更新时间:2023-10-16

我理解这里所说的一切,它描述了孩子如何访问父成员。但是,父母访问孩子怎么样?我只是无法理解这一点。为什么错了?您能否解释一下编译时的静态绑定规则?我想学生班本身在这里受到保护,但为什么呢?

using namespace std;
class Person
{
public:
int b;  
};
class Student : protected Person
{
public:
int c;
};
int main()
{
Student s;
Person *pPerson;
pPerson = &s;
return 0;
}

C-T 错误:

错误是:类型转换:存在从"学生*"到"人员*"的转换,但无法访问

它不是关于Person如何"看到"Student,而是关于继承的访问控制意味着什么。

当你说class Student: public Person时,这意味着你宣布一个Student对每个人都是一个Person,这意味着main()知道一个Student*可以被一个Person*引用。所以一切都很好。

当你说class Student: private Person时,这意味着Student继承了Person的功能,但这只是一个实现细节。这不会让任何人知道StudentPerson,因此不能将其视为。因此,main()认为Student*Person*是无关的。

当你说class Student: protected Person时,这有点棘手,但这个过程仍然适用。您正在从Person继承功能,任何派生的Student类也知道这一点。所以如果你有一个像Freshman这样的类继承自Student,它就会知道它也是一个Person。但是,这是特定于继承类的,main()不知道StudentPerson,因为该知识受到保护。