为 C++ 中的简单构造函数程序获取异常输出
Getting an unusual output for a simple constructor program in C++
我是 C++ 的新手,在尝试了解构造函数时遇到了异常错误。在这里,我试图让 x = 5 和 y = 6,然后让程序将它们打印到屏幕上。
这是我的程序 ->
#include <iostream>
using namespace std;
class class1 {
public:
int x;
int y;
class1(int x, int y) {
x = x;
y = y;
}
}
int main() {
class1 class1obj(5, 6);
cout << class1obj.x << endl << class1obj.y;
}
这是我在 3 运行 秒后的输出 ->
第一运行
172691493
1
第 2 运行
126890021
1
第 3 运行
226783269
1
正如您从输出中看到的那样,y 似乎是一个常数“1”,而 x 似乎只是通过随机数不断变化。
这个程序相当简单,所以我不知道这里出了什么问题。
还应该注意的是,我在 mac OS big sur 上,我使用 g++ -std=c++11 作为我的编译器,因为 g++ 似乎并不适用于所有人我的程序(是的,我已经为这个特定程序单独尝试了 g++,但它仍然不起作用)。
非常感谢任何帮助!
这个:
class1(int x, int y) {
x = x;
y = y;
}
称为阴影。一个变量隐藏另一个同名变量。 x = x
只是将参数 x
的值赋给自己,成员未初始化。编译器无法知道你想让一个 x
成为成员而另一个成为参数,相反,参数被称为“影子”成员,在 x = x;
中 x
是参数。您应该使用不同的名称:
class1(int a, int b) {
x = a;
y = b;
}
或使用成员初始化列表(无论如何你应该更喜欢):
class1(int a, int b) : x(a),y(b) {}
关于 x
指的是什么,初始化列表中没有歧义:
class1(int x, int y) : x(x),y(y) {}
在x(x)
中,第一个x
只能引用成员,第二个x
只能引用参数。
我是 C++ 的新手,在尝试了解构造函数时遇到了异常错误。在这里,我试图让 x = 5 和 y = 6,然后让程序将它们打印到屏幕上。
这是我的程序 ->
#include <iostream>
using namespace std;
class class1 {
public:
int x;
int y;
class1(int x, int y) {
x = x;
y = y;
}
}
int main() {
class1 class1obj(5, 6);
cout << class1obj.x << endl << class1obj.y;
}
这是我在 3 运行 秒后的输出 ->
第一运行
172691493
1
第 2 运行
126890021
1
第 3 运行
226783269
1
正如您从输出中看到的那样,y 似乎是一个常数“1”,而 x 似乎只是通过随机数不断变化。 这个程序相当简单,所以我不知道这里出了什么问题。
还应该注意的是,我在 mac OS big sur 上,我使用 g++ -std=c++11 作为我的编译器,因为 g++ 似乎并不适用于所有人我的程序(是的,我已经为这个特定程序单独尝试了 g++,但它仍然不起作用)。
非常感谢任何帮助!
这个:
class1(int x, int y) {
x = x;
y = y;
}
称为阴影。一个变量隐藏另一个同名变量。 x = x
只是将参数 x
的值赋给自己,成员未初始化。编译器无法知道你想让一个 x
成为成员而另一个成为参数,相反,参数被称为“影子”成员,在 x = x;
中 x
是参数。您应该使用不同的名称:
class1(int a, int b) {
x = a;
y = b;
}
或使用成员初始化列表(无论如何你应该更喜欢):
class1(int a, int b) : x(a),y(b) {}
关于 x
指的是什么,初始化列表中没有歧义:
class1(int x, int y) : x(x),y(y) {}
在x(x)
中,第一个x
只能引用成员,第二个x
只能引用参数。