假设我们有这个:
class Father
{
struct features
{
string hairColor = blonde;
int age = 1;
bool dumb = true;
} m_Features;
public:
Father();
~Father();
bool isDumb() { return m_Features.dumb; }
};
然后我们又开了一个班:
class FatherHandler : private Father
{
public:
// constructors here
void handle(Father *fa);
};
现在正在实施中:
void FatherHandler::handle(Father *fa)
{
if (fa->isDumb)
{
m_Features.dumb = true;
}
}
g ++编译器不允许上面的代码,因为m_Features是私有的;但是我私下继承父亲;因此应该允许。如何修改上面的代码,以便FatherHandler可以修改父而不会触发此编译时错误?请注意,我私下继承以表示“使用”标准,而不是公开继承使用“is-a”标准。
答案 0 :(得分:0)
私有继承意味着基类的公共成员和受保护成员在继承类中变为私有。派生类仍然无法访问私有成员,除非将其指定为朋友。