所以也许这是一个愚蠢的问题,我在想这个,但我有以下情况.我正在制作一个“类
Shell”,它可以运行抽象的“类Action”对象.它是唯一应该创建或使用这些对象的类.操作对象需要访问Shell以对其执行特定操作,但我试图避免为此添加公共接口(不应该允许其他人这样做).
我原来有一个简单的(不那么优雅)
class Shell { public: bool checkThing(); // etc... private: bool _thing; }; class Action { public: virtual void execute( Shell &s )=0; }; class ChangeAction : public Action { public: void execute( Shell &s ) { // requires friendship or public mutator! s._thing = true; } };
所以我考虑了一个嵌套类Action,但我想把它变成私有的(为什么让其他人做除了Shell之外的具体动作,对吧?)
class Shell { public: bool checkThing(); // etc... private: bool _thing; class Action; }; class Shell::Action { public: virtual void execute( Shell &s )=0; }; class ChangeAction : public Shell::Action { public: void execute( Shell &s ) { // ok now! s._thing = true; } };
但是我当然不能继承Action了(这是有道理的,它是私有的).所以这不起作用.
所以我的问题,我应该采用第一种方法和友谊还是公共界面?我可以使用类似于第二种方法的东西来保持与Actions和Shell的关系吗?
你有更好的主意吗?