c++ - 抑制基类构造函数的输出

标签 c++ inheritance constructor

我有一系列类告诉调试流(在本例中为 std::cout)它已创建,让我可以很好地跟踪程序执行。我有几个类是非抽象基类的子类,这会在创建子类实例时产生双重消息。当从子类调用时,我想抑制基类构造函数中的输出。我知道如果没有一些花哨的技巧,这可能是不可能的,如果它有可能的话。

我确实考虑过使用退格转义序列\b,并且只做足够的事情来删除之前的消息,效率不高,但它是调试信息,那么性能并不是那么关键。 ..).我不确定这种方法的可移植性或有效性。

欢迎任何想法,感谢您的努力!

最佳答案

没有办法抑制基本构造函数中的代码,除非基本构造函数中的代码自己检查某些条件。您可以通过例如将特殊标志传递给基本构造函数(具有默认值,不禁止调试输出)。

class Base
{
  public:
    Base(bool suppressDebugInfo = false)
    {
        if (!suppressDebugInfo)
            cout << "hallo from base" << endl;
    }
};

class Derived : public Base
{
  public:
    Derived(bool suppressDebugInfo = false) : Base(true)
    {
        if (!suppressDebugInfo)
            cout << "hallo from derived" << endl;
    }
};

如果您的输出被重定向到文件等,则输出 \b 将无济于事。

一个不错的解决方案是创建一个返回字符串的虚函数,并输出该函数的结果。但是,这不适用于您的情况(从构造函数调用),因为在基本构造函数运行期间,虚函数的行为就好像实例是基本类型,而不是派生的。

关于c++ - 抑制基类构造函数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328924/

相关文章:

c++ - C++ 的面向对象回调?

c++ - GJK碰撞检测从2D到3D的实现

c++ - 在 C++ 中处理类?

java - 定义中的初始化与构造函数中的初始化

c++ - 成员变量不保存从函数成员添加到它的值

java - Java 中一个构造函数内的两个构造函数调用

c++ - 错误 : mclmcr. h:没有这样的文件或目录从 C 调用 matlab 函数

c++ - 如何使用 Qt/c++ 为所有 UNIX 操作系统创建托盘图标?

python - 如何在 Python 中继承和扩展列表对象?

c++ - 无法访问派生类中的 protected 类成员