面向对象的成本计算不适用于C ++

时间:2017-01-09 12:22:48

标签: c++ oop recursion

我目前正在编写一个运动管理软件。 您可以将俱乐部和会员添加到这些俱乐部,但您也可以在俱乐部中添加子俱乐部。

问题:如果我建立新社团并添加新成员,则成本计算有效。

分会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;
     }
 }

感谢您的帮助

1 个答案:

答案 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