C+中的构造函数重载+; < >我的C++重载不起作用,我认为它应该: #include "Node.h" #include <iostream> Node::Node() { cout << "1" << endl; Node(Game(), 0.0); } Node::Node(double v) { cout << "2" << endl; Node(Game(),v); } Node::Node(Game g, double v) { cout << "3" << endl; numVisits = 0; value = v; game = g; } #包括“Node.h” #包括 Node::Node() { 构造函数中的cout

C+中的构造函数重载+; < >我的C++重载不起作用,我认为它应该: #include "Node.h" #include <iostream> Node::Node() { cout << "1" << endl; Node(Game(), 0.0); } Node::Node(double v) { cout << "2" << endl; Node(Game(),v); } Node::Node(Game g, double v) { cout << "3" << endl; numVisits = 0; value = v; game = g; } #包括“Node.h” #包括 Node::Node() { 构造函数中的cout,c++,C++,节点(Game(),v);并没有达到预期效果。它只是创建了一个临时变量,而没有使用它,并且没有任何效果。然后,当控件流到;上时,它会立即销毁该临时变量 正确的方法是初始化每个构造函数中的成员。您可以在私有init()成员函数中提取它们的公共代码,并在每个构造函数中调用它,如下所示: class Foo { public: Foo(char x); Foo(char x, int y); ... private: vo

节点(Game(),v);
并没有达到预期效果。它只是创建了一个临时变量,而没有使用它,并且没有任何效果。然后,当控件流到;上时,它会立即销毁该临时变量

正确的方法是初始化每个构造函数中的成员。您可以在私有init()成员函数中提取它们的公共代码,并在每个构造函数中调用它,如下所示:

class Foo {
    public:
        Foo(char x);
        Foo(char x, int y);
        ...
    private:
        void init(char x, int y);
};

Foo::Foo(char x)
{
    init(x, int(x) + 3);
    ...
}

Foo::Foo(char x, int y)
{
    init(x, y);
    ...
}

void Foo::init(char x, int y)
{
    ...
} 

C++11将允许构造函数调用其他对等构造函数(称为),但是,大多数编译器还不支持它。

您尝试使用的功能被调用,这是C++0x的一部分。使用该语法,您的第二个构造函数将变为

Node::Node(double v)
{
    cout << "2" << endl;
    Node(Game(),v);            // 1      
}
Node::Node(double v)
: Node(Game(),v)
{
    cout << "2" << endl;
}
Node::Node(双v)
:节点(Game(),v)
{

cout您可以这样做,其中init()是一个私有方法:

#include "Node.h"
#include <iostream>

Node::Node()
{
    cout << "1" << endl;
    init(Game(), 0.0);
}

Node::Node(double v)
{
    cout << "2" << endl;
    init(Game(),v);
}

Node::Node(Game g, double v)
{
    cout << "3" << endl;
    init(g,v)
}

void Node::init(Game g, double v)
{
    numVisits = 0;
    value = v;
    game = g;
}
#包括“Node.h”
#包括
Node::Node()
{
简言之:

#include <iostream>
#include "Node.h"

Node::Node()
    : game(Game()), value(0.), numVisits(0)
{
    std::cout << "1" << std::endl;
}

Node::Node(double v)
    : game(Game()), value(v), numVisits(0)
{
    std::cout << "2" << std::endl;
}

Node::Node(Game g, double v)
    : game(g), value(v), numVisits(0)
{
    std::cout << "3" << std::endl;
}
#包括
#包括“Node.h”
Node::Node()
:game(game()),value(0.),numVisits(0)
{
std::不能尝试使用
节点n(16.);
。我不确定编译器是如何处理整数常量的。请参阅:请参阅。您是对的(+1),但我认为在这种情况下,较长的解释会更有帮助@“它只是在不使用它的情况下创建了一个临时文件,并且没有任何效果。然后,当控制流通过;”时,它会立即破坏该临时文件:由于这种行为,我损失了1天时间。现在,我正在使用建议的
private init()
函数,所有功能都可以正常工作……遗憾的是,截至今天(2011年9月7日)它仅在IBM XLC++11.1中实现,并作为gcc的补丁(不在任何现有版本中)
#include "Node.h"
#include <iostream>

Node::Node()
{
    cout << "1" << endl;
    init(Game(), 0.0);
}

Node::Node(double v)
{
    cout << "2" << endl;
    init(Game(),v);
}

Node::Node(Game g, double v)
{
    cout << "3" << endl;
    init(g,v)
}

void Node::init(Game g, double v)
{
    numVisits = 0;
    value = v;
    game = g;
}
#include <iostream>
#include "Node.h"

Node::Node()
    : game(Game()), value(0.), numVisits(0)
{
    std::cout << "1" << std::endl;
}

Node::Node(double v)
    : game(Game()), value(v), numVisits(0)
{
    std::cout << "2" << std::endl;
}

Node::Node(Game g, double v)
    : game(g), value(v), numVisits(0)
{
    std::cout << "3" << std::endl;
}