c++ - 使用继承来添加功能

标签 c++ inheritance abstract-class

我正在使用抽象基类将日志记录功能添加到我的所有类中。它看起来像这样:

class AbstractLog
{
public:
    virtual ~AbstractLog() = 0;

protected:
    void LogException(const std::string &);

private:
    SingletonLog *m_log;    // defined elsewhere - is a singleton object
};

LogException() 方法将文本写入SingletonLog 对象中定义的日志文件,然后抛出异常。

然后我将其用作所有后续类的基类(在数百个库/DLL 中可能有数百/数千个)。

这允许我在通常会抛出异常的地方调用 LogException()

我的问题是这是否是好的设计/实践。

P.S.:我使用继承只是为了向我的所有类添加功能,而不是实现任何类型的多态性。最重要的是,我所有的类都与 AbstractLog 类具有 is-a 关系的概念是有争议的(每个类都是一个可记录的对象?嗯,是的,我想它们是,但只是因为我让他们如此)。

最佳答案

你的建议会起作用,我认为更好的办法是创建日志类(继承自这个接口(interface))并将其用作组合(使用接口(interface))而不是继承 - 组合是逻辑类和日志类之间的较弱连接。最佳做法是类(class)越少越好。额外的好处是您可以随时扩展日志功能,而无需修改业务逻辑。

关于这个单例,也许代理模式更好?

希望,我帮助了:)

关于c++ - 使用继承来添加功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31181737/

相关文章:

c++ - 如何使用Qt实现三态按钮

javascript - 修改子类实例中的变量

java - 为什么看起来调用了错误的方法?

java - 如何在 JNI 中查找二维数组大小

c++ - 调用迭代函数的次数

java - 如何使类(class)特化有哪些选择或最佳实践?

c# - 如何使用 internal 关键字隐藏类?

c++ - 从抽象类派生的类的对象应该在自由存储中?

c++ - 抽象类和构造函数

c++ - int argc, char *argv[] 是什么意思?