如果类(class)女儿(孙女继承自该类(class))从访问权限指定符设置为PRIVATE的类(class)母亲继承,为什么类(class)母亲无法从类(class)孙女访问?我无法创建对象或指针。为什么?这种行为背后的逻辑是什么?如果我在孙女类(class)中使用母亲对象,可能会有什么问题?并且,与最后一个问题相关,为什么如果类(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;}

最佳答案

您可以创建mother指针和实例。但是,由于名称解析规则,mother typename将引用私有(private)基类。为了解决这个问题,您可以使用完全限定的类型名称::mother将该类型称为非基类型:

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

10-08 19:27