我正在运行以下代码并期望输出窗口在程序结束时应显示等于3的点数。点p3存在一些问题,我在创建新点并使用增量运算符后用p2初始化。我不明白什么是错的。绝对遗漏了一些东西。需要帮助!
感谢阅读。
#include <iostream>
using namespace std;
class Point {
private:
int x, y;
static int count;
public:
Point(): x(0), y(0) { count++; }
Point(int x1, int y1) {
x = x1; y = y1;
count++;
}
int getCount() const { return count; }
Point operator=(Point &p) {
x = p.x;
y = p.y;
return *this;
}
Point operator++() {
x++; y++;
return *this;
}
void print() { cout << "(" << x << ", " << y << ")" << endl; }
};
int Point::count = 0;
//================ Driver Program ============
int main() {
Point p1;
Point p2(1, 1);
p1.print();
p2.print();
Point p3 = ++p2;
p3.print();
cout << "Number of points: "<<p1.getCount() << endl;
system("pause");
return 0;
}
答案 0 :(得分:2)
string RawToken =
Parser.Parse.ParseLineIntoToken(curlinecont);
是p3
的副本,但您没有使计数器递增的复制构造函数。
您需要p2
Point(const Point&)
(除了复制++counter
和x
成员)。
答案 1 :(得分:1)
假设您期望该程序打印出点数为3,那么您实际上缺少了几件事:
p3
时,系统会调用该号码,默认值不会增加您的计数器。复制构造函数类似于Point(const Point&) { ++counter; }
。Point
更改为Point&
。这样,这些运算符将返回相同对象的引用而不是它的副本 - 这意味着没有创建副本,因此复制构造函数不会在每个运算符的末尾调用,但只有在您实际创建时才会副本(如p3
)。答案 2 :(得分:0)
您需要添加复制构造函数。
Point(const Point &p)
: x(p.x),
y(p.y)
{
++count;
}