我目前正在编写一个运动管理软件。 您可以将俱乐部和会员添加到这些俱乐部,但您也可以在俱乐部中添加子俱乐部。
问题:如果我建立新社团并添加新成员,则成本计算有效。
分会1:会员1,会员2,会员3 - >成本计算是正确的
如果我现在添加第二个俱乐部,那么该俱乐部的费用计算也是正确的。
分会2:会员5,会员6. - >成本计算是正确的
但是,如果我现在将Club 2添加为Club 1的分支,则计算仍然与没有Club 2分支的情况相同
分会1:会员1,会员2,会员3,分会2 - >计算不正确。
我真的很感谢你的帮助。下面是我的代码。
Members.cpp
#include <iostream>
#include <string>
#include "Members.h"
static int memberid = 0;
Members::Members()
{
this->name = "default";
this->id = memberid++;
}
Members::Members(std::string name)
{
this -> name = name;
this->id = memberid++;
}
Members::~Members()
{
}
void Members::setname(std::string newname)
{
this -> name = newname;
}
std::string Members::getName()
{
return this->name;
}
int Members::getID()
{
return this->id;
}
double Members::getIncome()
{
return this->income;
}
void Members::setIncome(double income)
{
this->income = income;
}
double Members::getCosts()
{
return this->costs;
}
void Members::setCosts(double costs)
{
this->costs = costs;
}
double Members::getSurplus()
{
return this->income - this->costs;
}
std::string Members::toString()
{
std::string formated = " Member: " + getName() + "\n Income: " + std::to_string(getIncome()) + "\n Costs: " + std::to_string(getCosts()) + "\n Surplus: " + std::to_string(getSurplus());
return formated;
}
社会中的社会科学。它是阶级社会:公众成员
#include "Society.h"
#include "Membertypes.h"
#include <sstream>
#include <vector>
#include <algorithm>
Society::Society(std::string name, int maximalmembers)
{
setname(name);
setMax(maximalmembers);
Members::setCosts(this->getCosts());
Members::setIncome(this->getIncome());
}
double Society::getIncome()
{
double income=0;
for (int i = 0, n = members.size(); i < n; i++)
{
income += members[i].getIncome();
}
return income;
}
double Society::getCosts()
{
double costs=0;
for (int i = 0, n = members.size(); i < n; i++)
{
costs += members[i].getCosts();
}
return costs;
}
double Society::getSurplus()
{
double surplus=0;
for (int i = 0, n = members.size(); i < n; i++)
{
surplus += members[i].getSurplus();
}
return surplus;
}
void Society::addMember(Members* newMember)
{
if ((int) members.size() < this -> maximalMembers)
{
this ->members.push_back(*newMember);
}
else
{
std::cout << "To many members" << std::endl;
}
}
感谢您的帮助
答案 0 :(得分:0)
在某种程度上,这是一个在黑暗中的狂野刺,但你在Society
类中有一个Members
。
您已将void Society::addMember(Members* newMember)
{
if ((int) members.size() < this -> maximalMembers)
{
this ->members.push_back(*newMember);
}
else
{
std::cout << "To many members" << std::endl;
}
}
设计为多态类 - 您具有虚函数,并且各种构造函数为每种类型设置了不同的成本等。
但是,当你把它们放在矢量中时,你只需切片。
您的添加方法:
Member
获取指针 - 这是潜在的内存泄漏 - 然后将其视为std::vector<std::shared_ptr<Members>>
。
请考虑使用Dictionary
。