C ++继承封闭类-这是一种好习惯吗?

Posted

技术标签:

【中文标题】C ++继承封闭类-这是一种好习惯吗?【英文标题】:C++ inhereting enclosing class - is this good practice? 【发布时间】:2014-10-23 21:47:48 【问题描述】:

我最近尝试在模块中设计部分代码。我的问题是如何命名并保留它,以便班级的名称/地址既容易又告诉所有有关班级目的的知识。第一个想法是创建名为 Foo 的接口(抽象类),然后在命名空间 Foo 创建类,这样我就有如下代码:

Foo* foo = Foo::Bar();

但是我们不能同时创建同名的命名空间和类。所以另一种方法是将接口作为封闭类并将指定的类(它们的声明)放入其中,然后再定义这些指定的类:

class A 
    public:
        void foo() = 0;

        class B;
        class C;
;

class B : public A 
    //
;

class C : public A 
    //
;

我想知道这种类和接口的设计是否是好的做法?或者我应该使用其他东西/不要介意基类的错误命名?

Big pro 是命名。如果 - 例如 - 我将它用作异常系统 - 我可以编写如下代码:

Exception* exception = new Exception::IllegalArgument();

代替:

Exception::Interface* exception = new Exception::IllegalArgument();

但我也注意到了一个很大的骗局。我可以这样写:

Exception::IllegalArgument::Exception::IllegalArgument::Exce... exception;

那么,您对此有何看法?类型的无限循环是否可以且不介意,或者我应该考虑不同的策略?

【问题讨论】:

【参考方案1】:

这是一种冷漠的做法。

我的意思是它既没有给你买那么多,也没有真正的缺点。

不过,规范只是将它们放在同一个命名空间中并完成。

它“看起来更干净”,如果你改变层次结构,至少有机会在没有太多流血的情况下完成它。

【讨论】:

好吧,所以除了创建一个命名空间并把所有相关的东西都扔进去之外,你能推荐其他类似的设计模式吗(一个基类和许多派生类?甚至是一些层次结构)?

以上是关于C ++继承封闭类-这是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

C++ Singleton 类——继承的好习惯

抽象类中的私有非抽象成员和继承 C#

在 React 类组件中同时使用继承和组合是一种好的做法吗?

C ++接口类继承自具体类是否合理?

将两个对象与继承和聚合相关联是不好的编程习惯吗?

Effective C++(第三版)笔记 ---- 第一部分让自己习惯C++