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;
}