【发布时间】:2015-01-23 16:14:54
【问题描述】:
假设我们有这个:
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 可以修改Father 而不会触发这个编译时错误?请注意,我私下继承来表示“使用”标准,而不是公开继承使用“is-a”标准。
【问题讨论】:
-
首先,为什么
m_Features是私有的并且不受保护?其次,为什么不使用封装与继承?你承认自己这不是一个“是”的情况。 -
你真的应该尝试发布一个 MCVE。示例中的大部分代码都分散了问题的注意力。
-
我只是在这里做实验。我确实忽略了私有继承并不是它所描述的那样。
标签: c++ class oop design-patterns g++