【问题标题】:Can I call another overloaded constructor in C++? [duplicate]我可以在 C++ 中调用另一个重载的构造函数吗? [复制]
【发布时间】:2015-08-15 17:13:11
【问题描述】:
class draw
{
    draw(circle i)
    {
        // draw a circle;
    }

    draw(circle i, circle j)
    {
        draw(i);
        draw(j);
    }
}

即使使用模板,我是否可以在 C++ 中调用同一类的另一个重载构造函数?

【问题讨论】:

    标签: c++ overloading


    【解决方案1】:

    不,在 C++ 中,您不能让一个构造函数直接调用另一个构造函数(嗯,至少不超过一次)。但是,您可以让每个构造函数调用执行实际工作的第三个方法。

    class draw
    {
        draw(circle i)
        {
            do_draw(i);
        }
    
        draw(circle i, circle j)
        {
            do_draw(i);
            do_draw(j);
        }
    
        void do_draw(circle c)
        {
            // draw a circle;
        }
    }
    

    【讨论】:

    • 那么 c++11(或至少 c++14)不是在成员初始化器列表中引入了调用其他构造函数吗?
    • 是的,C++11 允许构造函数调用初始化列表中同一类的另一个构造函数。它被称为delegating constructors
    • 没错,但是你只能调用一次委托构造函数,不能像这个问题所说的那样多次调用。
    • @GregHewgill 问题如何表明构造函数应该被多次调用?您能否详细说明一下当前标准的实际适用解决方案?
    • @πάνταῥεῖ:什么?我不是在谈论任何标准。我观察到 OP 的双参数构造函数实际上想要画两个圆圈。如果存在绘制一个圆的单参数构造函数,则不能两次调用该构造函数来绘制两个不同的圆。正如我在回答中所建议的那样,人们必须创建第三种方法。
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 2010-09-23
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2017-01-05
    相关资源
    最近更新 更多