我正在编写一个赋值程序,它实现了面向对象的原则,旨在模拟选举。
我有一个班级聚会:
class Party{
public:
Party(){};
~Party(){};
Party(std::string name, int budget){partyName = name; electionBudget = budget;}
std::string getPartyName(){return partyName;}
std::string getLeaderName(){return leaderName;}
std::string getManagerName(){return managerName;}
int getElectionBudget(){return electionBudget;}
void setElectionBudget(int budget){electionBudget = budget;}
void setLeaderName(std::string lName){leaderName = lName;}
void setManagerName(std::string mName){managerName = mName;}
std::vector<Stance> getPartyStances(){return partyStance;}
void setPartyStances(std::vector<Stance> pStance){partyStance = pStance;}
void *leaderPtr;
void *managerPtr;
void setLeader(void *a){leaderPtr = a; }
void setManager(void *a){managerPtr = a;}
void spendMoneyOnEvent(int cost){
int currentBudget = getElectionBudget();
setElectionBudget(currentBudget - cost);
}
void print();
private:
std::string partyName;
std::string leaderName;
std::string managerName;
std::vector<Stance> partyStance;
int electionBudget;
};
在一个大的for循环中,我每天更新每个参与方的预算,像这样:
for(Party p : partiesVector){
std::cout << p.getPartyName() << " budget remaining: " << "$" << p.getElectionBudget() << std::endl;
}
我还在main.cpp中实现了代码,以便在每次事件发生时更新预算。例如:
case 0:
std::cout << debate.getEventName() << std::endl;
std::cout << debate.getEventDecription() << std::endl;
party1.spendMoneyOnEvent(500);
std::cout << party1.debate.haveDebate(party1, party2, party3);
break;
然而,无论我如何尝试设置事物或尝试更新变量,它总是保持不变(我声明它的样子)。是不是有什么我不明白的地方?
任何帮助将是非常感激的,因为我对c++还是比较陌生的
谢谢!
for(Party p : partiesVector)
正在接收Party
对象的值,因此生成一个副本。对p
的任何更新都将更新副本,而不是原件。确保这些循环通过引用接收Party
而不是:
for(Party &p : partiesVector)
无论如何都应该这样做,即使是只读循环。
更重要的是,您的显示循环是通过Party
对象的vector
进行迭代,但您的更新代码直接更新不在vector
中的Party
对象。当您将Party
添加到vector
时,可能会生成另一个副本。因此,您应该更改您的更新代码,以引用vector
中的Party
。
partiesVector[someIndex].spendMoneyOnEvent(500);
或者更改vector
以保存指向Party
对象的指针,这些对象是在vector
之外创建的。
vector<Party*> partiesVector;
...
Party party1;
...
partiesVector.push_back(&party1);
...
party1.spendMoneyOnEvent(500);
...
for(Party *p : partiesVector) {...}