使用受保护和继承时无法访问在类中声明的私有成员

Posted

技术标签:

【中文标题】使用受保护和继承时无法访问在类中声明的私有成员【英文标题】:cannot access private member declared in class while using protected and inheritance 【发布时间】:2020-09-14 07:54:05 【问题描述】:

我在使用protected 成员时遇到了一些问题。相关代码和我得到的错误如下。这些类具有所有需要的函数和变量。我刚刚总结了相关部分。我该怎么办?

MFS.h:

class MFS

protected:
    MatrixXd commandedLateral;
;

CSimulator.h:

class CSimulator : MFS

;

CSimulator.cpp:

void CSimulator::calculateActuator(MFS* mfs)

    actuator = -gain * mfs->commandedLateral(1,0);

错误 C2248:“MFS::commandedLateral”:无法访问在“MFS”类中声明的私有成员

【问题讨论】:

【参考方案1】:

protected成员只能通过派生类访问,即不能通过基类MFS访问。

(强调我的)

类的受保护成员只能访问

1) 给该班级的成员和朋友;

2) 任何派生类的成员and friends (until C++17) 那个类,但只有当通过它的对象的类 访问受保护的成员是该派生类或派生类 该派生类的

例如下面的代码应该可以正常工作。

void CSimulator::calculateActuator(CSimulator* mfs)

    actuator = -gain * mfs->commandedLateral(1,0);

【讨论】:

以上是关于使用受保护和继承时无法访问在类中声明的私有成员的主要内容,如果未能解决你的问题,请参考以下文章

OOP 和私有字段的继承

5继承与派生2-访问控制

Java中的间接子类无法访问的超类中的受保护成员

记PHP面向对象编程

C++_练习—继承_公有继承

策略继承和不可访问的受保护成员