为什么当我从'mother'类继承,访问说明符设置为PRIVATE时,我无法在'granddaughter'类中创建'mother'类对象?

And*_*sta 1 c++ inheritance class

为什么班级母亲无法从班级孙女那里进入,如果班级女儿(孙女从哪个继承)继承了班级母亲,并且访问说明符设置为私人?我无法创建对象或指针.为什么?这种行为背后的逻辑是什么?如果我在孙女班中使用母亲物品会有什么问题?并且,连接到最后一个问题,为什么如果类女儿从类母亲继承并且访问说明符设置为PUBLIC或PROTECTED,我可以创建一个母对象到孙女类?这些问题不会回复给我吗?

#include <iostream>
#include <stdio.h>

using namespace std;

class mother
{
    public:
        mother(){};
};

class daughter : private mother
{
    public:
        daughter(){};
};

class granddaughter : public daughter
{ 
    public:
        granddaughter(){}; // ERROR
        mother* mother; // ERROR
};


int main(void){return 0;}
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 5

您可以创建mother指针和实例.但是,由于名称解析规则,mothertypename将引用私有基类.要解决这个问题,您可以使用完全限定类型名称::mother将类型称为非基类:

class granddaughter : public daughter
{ 
    public:
        ::mother* mother; // NO ERROR
};
Run Code Online (Sandbox Code Playgroud)