【问题标题】:C++ inhereting enclosing class - is this good practice?C ++继承封闭类-这是一种好习惯吗?
【发布时间】: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;

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

【问题讨论】:

    标签: c++ class oop inheritance nested


    【解决方案1】:

    这是一种冷漠的做法。

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

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

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

    【讨论】:

    • 好吧,所以除了创建一个命名空间并把所有相关的东西都扔进去之外,你能推荐其他类似的设计模式吗(一个基类和许多派生类?甚至是一些层次结构)?
    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 2021-08-20
    • 2012-03-11
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多