【问题标题】:How to set multiple instances of a class within another?如何在另一个类中设置多个实例?
【发布时间】:2017-11-26 16:57:19
【问题描述】:

我无法设置我的代码,以便查看每个岛上每个人的信息。用户首先输入将有多少个岛屿。这应该会创建一定数量的 Island 类实例。每个岛屿都会有一个人口。有什么可能的方法可以为每个岛屿创建用户数量的人吗?

例如,用户可以说他们想要 3 个岛屿,这些岛屿分别有 30、40 和 50 人。我必须能够选择一个岛屿并检查一个人的状态以查看它是否为“h”。

如果有人能帮忙,那就太好了。

#include <iostream>
#include <string>
using namespace std;

class Person
{
friend class Island;

private:
    char status;
    int population;
public:
    Person *next;
    Person();
    Person(char&, int&);
};


Person::Person()
{
}

Person::Person(char& s, int& p)
{
    status = s;
    population = p;
    next = NULL;
}

class Island
{
private:
    Person *root;
public:
    Island();
    ~Island();
    void addPerson(char&, int&);
    void traverseList();
};

Island::Island()
{
    root = new Person();
    root = NULL;
}

Island::~Island()
{
    delete root;
}

void Island::addPerson(char& healthstatus, int& population)
{
    Person *new_civilian = new Person(healthstatus, population);

    if(root == NULL)
    {
        root = new_civilian;
        return;
    }
    else
    {
        Person *temp_person = root;
        while(temp_person->next != NULL)
        {
            temp_person = temp_person->next;
        }
        temp_person->next = new_civilian;
    }
}

int main()
{
    int num;
    Island island_catalog;
    char healthstatus = 'h';
    cout << "How many islands?\n";
    cin >> num;
    for(int i=0; i<num; i++)
    {
        int pop;
        cout << "Island "<< i+1 << " Population: ";
        cin >> pop;
        island_catalog.addPerson(healthstatus, pop);
        pop = 0;
    }
    return 0;
}

【问题讨论】:

  • SO 不是代码编写服务。
  • 问题是你没有处理 addPerson() 的人口参数。话虽如此,如果它添加了多个人,是否应该将其命名为 addPerson()。
  • 我希望一个人所在的岛屿成为该人的财产。为什么将“人口”作为 Person 的属性?请记住,您应该尽可能接近“现实”来建模对象,以做好 OOP。如果没有“人口”数字真的是 Person 的属性,那么不要在代码中那样建模。
  • 我认为人应该被命名为 PeopleList 或类似的名称。然后拥有人口成员变量是有道理的。或者 Person 应该是 PersonList 的节点,每个人都应该有一个单独的健康状况。

标签: c++ list class


【解决方案1】:

Island班最好举办一次

std::vector<Person>

person 类不应该有人口,因为每个人都是一个人口。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 2015-06-09
    • 1970-01-01
    • 2018-10-29
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多