我有一个Message类的对象,它可以被写入并随后被更新。据我所看到的,MessageUpdate IS-A内留言:C++:在派生类中限制方法访问
class MessageWrite
{
protected:
void setVersion(int version_) {...}
void setReceiveTime(int tmReceive_) {...}
Message _msg;
};
class MessageUpdate:public MessageWrite
{
//ONLY setVersionShould be accessible here, NOT setReceiveTime
};
有没有方法访问级别和继承级别的组合,可以帮助实现这一目标?
我知道MessageUpdate可以简单地做成基类,但这里有一点:如果我想扩展消息类,它会导致菱形模式。考虑:
class MessageUpdate {...};
class MessageWrite: public MessageUpdate {...};
//Now, while extending:
class AdminMessageUpdate:public MessageUpdate {...};
class AdminMessageWrite: public AdminMessageUpdate, public MessageWrite //DIAMOND Pattern!!
哪里有我对遗传理解的差距?是否有完全不同的方式来实现这种逻辑没有多重继承(如后面的代码片段所示)?
菱形图案是只要OK [虚拟继承] (http://en.wikipedia.org/wiki/Virtual_inheritance)。 – dasblinkenlight 2012-04-09 14:10:18
有关使用虚拟基类的示例,请参阅http://stackoverflow.com/a/21607/13140以确保您的继承树中不会获得“MessageWrite”的多个副本。所以你想只有MessageWrite能够调用setReceiveTime()? – 2012-04-09 14:15:58
感谢dasblinkenlight,但我更喜欢@Als的方法,因为它可以节省多重继承的运行时成本 – vid 2012-04-09 14:16:44