有人可以向我解释为什么这段代码在Eclipse CDT中不起作用?当我运行程序时,输出是" 310598136。"我也在第7行收到错误,说明"'成员x(和y)未在此构造函数中初始化"但是当我在类的私有部分中分配构造函数和内存中的变量时,我不知道它们为什么不初始化。有人可以告诉我我做错了吗?
#include <iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(int a, int b)
{
a = x;
b = y;
}
int getArea();
private:
int x;
int y;
};
int Rectangle::getArea()
{
return x * y;
}
int main()
{
Rectangle bob(2,3);
cout << bob.getArea();
return 0;
}
答案 0 :(得分:1)
您已在构造函数中交换了变量的顺序。
将其更改为
Rectangle(int a, int b) : x(a), y(b) {}
或者,更好
Rectangle(int x, int y) : x(x), y(y) {}
C ++足够聪明,您可以在参数列表中使用与成员变量相同的名称,当您只是复制值时,您也可以这样做 - 它非常清楚地传达了该参数是为了。
始终记住按照您在班级中声明的顺序初始化成员变量。