我的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;
}
Run Code Online (Sandbox Code Playgroud)
而输出来自:
Node n(16);
cout << n.value << endl;
Run Code Online (Sandbox Code Playgroud)
是0,应该是16.
我做错了什么?
Mu *_*iao 42
Node(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)
{
...
}
Run Code Online (Sandbox Code Playgroud)
C++ 11将允许构造函数调用其他对等构造函数(称为委托),但是,大多数编译器还没有支持它.
Pra*_*ian 18
您尝试使用的功能称为委托构造函数,它是C++ 0x的一部分.使用该语法,您的第二个构造函数变为
Node::Node(double v)
: Node(Game(),v)
{
cout << "2" << endl;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75812 次 |
| 最近记录: |