面向对象 成本计算C++不起作用
Object-oriented Cost-calulation not working C++
我目前正在编写一个体育管理软件。您可以将俱乐部和成员添加到这些俱乐部中,但您也可以将子俱乐部添加到俱乐部本身。
问题:如果我创建一个新社团并添加新成员,则成本计算有效。
俱乐部 1:会员 1、会员 2、会员 3 -->成本计算正确
如果我现在添加第二个俱乐部,该俱乐部的成本计算也是正确的。
俱乐部2:会员5,会员6。 -->成本计算正确
但是,如果我现在将俱乐部 2 添加为俱乐部 1 的分支,则计算结果仍然与没有俱乐部 2 分支的计算相同
俱乐部 1:会员 1、会员 2、会员 3、俱乐部 2 ->计算不正确。
我真的很感激你的帮助。下面是我的代码。
成员.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;
}
社会.cpp在社会中是阶级 社会:公共成员
#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;
}
}
感谢您的帮助
在某种程度上,这是在黑暗中疯狂的刺伤,但你在Society
类中有一个std::vector<Members> members;
。
您已经将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>>
。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 为什么这段代码不起作用,我该如何解决?
- 我正在开发服务器,ip作为参数传递不起作用