为什么第二个变量在现场没有变化?
Why does the second variable not change in the field?
我正在为我的讲座测试一些程序。我正在创建 类 并使用参数列表初始化一个字段,但第二个变量没有改变。
#include <iostream>
using namespace std;
class Punkt {
int x;
int y;
public:
Punkt(int a = 0, int b = 0)
{
x = a;
y = b;
}
void printXY()
{
cout << "x= " << x << " y= " << y << endl;
}
};
int main() {
Punkt pFeld[] = { (1, 1), (2, 2), (3, 3) };
for (int i = 0; i < 3; i++)
pFeld[i].printXY();
cin.get();
};
没有错误信息。预期结果是x和y发生变化,而实际结果是只有x发生变化而y保持0。
这个
(1, 1)
是带逗号运算符的表达式。
其实这个初始化
Punkt pFeld[] = { (1, 1), (2, 2), (3, 3) };
相当于
Punkt pFeld[] = { 1, 2, 3 };
所以第二个默认参数等于0的构造函数被调用了三次。
改用
{ 1, 1 }
这是您更新后的代码
#include <iostream>
using namespace std;
class Punkt {
int x;
int y;
public:
Punkt(int a = 0, int b = 0)
{
x = a;
y = b;
}
void printXY()
{
cout << "x= " << x << " y= " << y << endl;
}
};
int main() {
Punkt pFeld[] = { {1, 1}, {2, 2}, {3, 3} };
for (int i = 0; i < 3; i++)
pFeld[i].printXY();
cin.get();
}
它的输出是
x= 1 y= 1
x= 2 y= 2
x= 3 y= 3
注意main函数后面的分号是多余的
将(1, 1)
传递给Punkt
的构造函数,comma operator将return第二个操作数作为结果(第一个操作数被丢弃),所以你'只将一个 int
的值 1
传递给构造函数。这就是为什么 y
总是初始化为 0
.
你想要的应该是
Punkt pFeld[] = { {1, 1}, {2, 2}, {3, 3} }; // list initialization since C++11
或
Punkt pFeld[] = { Punkt(1, 1), Punkt(2, 2), Punkt(3, 3) };
我正在为我的讲座测试一些程序。我正在创建 类 并使用参数列表初始化一个字段,但第二个变量没有改变。
#include <iostream>
using namespace std;
class Punkt {
int x;
int y;
public:
Punkt(int a = 0, int b = 0)
{
x = a;
y = b;
}
void printXY()
{
cout << "x= " << x << " y= " << y << endl;
}
};
int main() {
Punkt pFeld[] = { (1, 1), (2, 2), (3, 3) };
for (int i = 0; i < 3; i++)
pFeld[i].printXY();
cin.get();
};
没有错误信息。预期结果是x和y发生变化,而实际结果是只有x发生变化而y保持0。
这个
(1, 1)
是带逗号运算符的表达式。
其实这个初始化
Punkt pFeld[] = { (1, 1), (2, 2), (3, 3) };
相当于
Punkt pFeld[] = { 1, 2, 3 };
所以第二个默认参数等于0的构造函数被调用了三次。
改用
{ 1, 1 }
这是您更新后的代码
#include <iostream>
using namespace std;
class Punkt {
int x;
int y;
public:
Punkt(int a = 0, int b = 0)
{
x = a;
y = b;
}
void printXY()
{
cout << "x= " << x << " y= " << y << endl;
}
};
int main() {
Punkt pFeld[] = { {1, 1}, {2, 2}, {3, 3} };
for (int i = 0; i < 3; i++)
pFeld[i].printXY();
cin.get();
}
它的输出是
x= 1 y= 1
x= 2 y= 2
x= 3 y= 3
注意main函数后面的分号是多余的
将(1, 1)
传递给Punkt
的构造函数,comma operator将return第二个操作数作为结果(第一个操作数被丢弃),所以你'只将一个 int
的值 1
传递给构造函数。这就是为什么 y
总是初始化为 0
.
你想要的应该是
Punkt pFeld[] = { {1, 1}, {2, 2}, {3, 3} }; // list initialization since C++11
或
Punkt pFeld[] = { Punkt(1, 1), Punkt(2, 2), Punkt(3, 3) };