C私有嵌套抽象类

C私有嵌套抽象类,第1张

概述所以也许这是一个愚蠢的问题,我在想这个,但我有以下情况.我正在制作一个“类 Shell”,它可以运行抽象的“类Action”对象.它是唯一应该创建或使用这些对象的类. *** 作对象需要访问Shell以对其执行特定 *** 作,但我试图避免为此添加公共接口(不应该允许其他人这样做). 我原来有一个简单的(不那么优雅) class Shell{ public: bool checkThing(); 所以也许这是一个愚蠢的问题,我在想这个,但我有以下情况.我正在制作一个“类 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的关系吗?
你有更好的主意吗?

解决方法 如果需要能够看到Action的唯一代码是Shell,则一个选项是在头文件中转发声明Action,但仅在.cpp文件中定义类.这样就可以让你在实现文件中声明尽可能多的Action子类,而不让其他任何人从Action中继承子类,因为没有其他人可以拥有Action的完整类定义.这也避免了对公共接口或友元声明的任何需要 – 所有Action类都在全局范围内声明,但由于在.cpp文件中声明而与其他文件隔离.

很棒的问题,顺便说一下!

总结

以上是内存溢出为你收集整理的C私有嵌套抽象类全部内容,希望文章能够帮你解决C私有嵌套抽象类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1238717.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存