【发布时间】:2020-11-26 00:27:34
【问题描述】:
这是我的代码
#include <iostream>
#include <string>
class Person {
private:
int pancakesEaten, personID;
public:
Person() {
pancakesEaten = 0;
personID = setID();
}
static int setID() {
static int currID;
return currID++; // Returns currID and then increments.
}
bool operator>=(const Person& p);
bool operator<=(const Person& p);
void askPancakesEaten();
void print();
};
bool Person::operator>=(const Person& p) {
if(this->pancakesEaten >= p.pancakesEaten) {
return true;
}
return false;
}
bool Person::operator<=(const Person& p) {
if(this->pancakesEaten <= p.pancakesEaten) {
return true;
}
return false;
}
void Person::askPancakesEaten() {
std::cout << "Please enter how many pancakes you ate: ";
std::cin >> this->pancakesEaten;
}
void Person::print() {
std::cout << this->personID;
std::cout << "Person " << this->personID << " ate " << this->pancakesEaten << " pancakes";
}
int main() {
Person people[10];
for(int i = 0; i<10; i++) {
Person currPerson;
currPerson.askPancakesEaten();
currPerson.print();
}
}
我的问题是我正在尝试为 10 个 Person 对象初始化一个数组,并且由于我的静态方法,当我进入我的 for 循环时,它使我的静态计数从 10 开始。
我知道我可以通过更改我的构造函数并摆脱 setID 并只使用 i 来轻松解决这个问题,但我很好奇是否有其他解决方法?
【问题讨论】:
-
我没有看到任何关于我们为什么会遇到问题的解释。数组默认初始化 10 个人,因此您的静态方法会计算他们。问题出在哪里?
-
您的问题听起来像是您知道应该使用
people[i]而不是currPerson,但您不想? -
为什么会有静态变量?看起来您正在尝试为您创建的每个人创建一个唯一的 ID。但这违背了您的要求,即不要为每个新人创建一个唯一的 ID。那么你想要的逻辑是什么?您可以创建一个重置 ID 的重置方法。
-
这个数组到底是干什么用的?
-
我现在明白了。答案是正确的。问题在于,您不是使用 10 个 Person 对象的数组,而是在循环中创建额外的
Person对象,在 10 次迭代中的每一次迭代中初始化然后丢弃它们。
标签: c++ static static-methods