3

我有一个任务是建立一个国家度假村的信息系统,能够从/到文件中读取/写入度假村的数据并对其进行修改。

class CTоurist{
    string m_StrName;
    string m_StrCountry;
    int m_iAge;
public:
    //constructors, mutators, accessors overloading operator <<,>>

};

我写这门课没有问题。在这里我有一个类,它包含第一类对象的成员变量向量

class CHotel
{
    string m_strHotelName;
    int m_iNumberOfBets;
    double m_dAveragePrice; //average price per bet in the hotel
    vector <CTourist> m_vecTourists; //vector of tourists rested in the hotel
public:
.....
};

还有一个类 Resort 包含作为第二类对象的成员变量向量

class CResort
{
    string m_ResortName;
    unsigned m_Height;
    vector<CHotel*> m_Hotels;
public:
.....
};

所以这就是问题所在。我不确定如何为该向量变量编写访问器、修改器和构造器,以便我可以使用它们的属性。感谢您的检查,如果有人能帮我弄清楚这些功能,我将不胜感激!

4

3 回答 3

1

如果我理解正确,您想知道从 cResort 获得酒店的最佳方式。

我会推荐

cHotel* GetHotelByName(std::string& a_sName)
{
    for(int i = 0; i < m_Hotels.size(); ++i)
    {
        if(m_Hotel[i].GetName() == a_sName)
            return m_Hotel[i]
    }
return nullptr; // if non found return return null
}

并向您的酒店类添加一个 GetName 函数,该函数返回其名称的字符串。这也允许您设置名称等。

于 2013-04-13T10:18:41.617 回答
1

1) Accessor, mutator:有很多选择。

您可以创建另一个像CTouristList(和CHotelList分别)这样的类,它包装vector,从CHotel类中引用它(访问器方法像CTouristList& CHotel::GetTouristList()and const CTouristList& CHotel::GetTouristList() const)并实现像CTouristList::Add, CTouristList::Remove,CTouristList::Get等方法。

或者您可以CHotel::AddTourist()直接在CHotel类上添加方法。

2) 构造函数。构造函数中不需要任何东西。但是因为vector<CHotel*>您可能需要析构函数CResort来显式释放CHotel实例。虽然不确定为什么要使用指向CHotel.

于 2013-04-13T10:19:27.523 回答
1

您可以将访问器和修改器函数放在 CTourist 中,就像它们没有存储在 Vector 中一样。

要在 CHotel 中使用它们,您可以在 CHotel 中添加一个函数,该函数返回指向 CTourist 的指针。

// Access a CTourist
Hotel.getTourist(1)->setName("Tourist name");

添加一个返回访问过酒店的游客数量的方法将更容易循环访问它们。

for(int i = o; i < Hotel.touristCount(); ++i)
{
  // Do something useful
  std:: cout << "Hello " << Hotel.getTourist(i)->getName();
}

在这种情况下,您的 CHotel::touristCount() 将是 vector<>.size(); 的包装器;

如果您不希望 CHotel 外部的代码直接访问 CTourist 对象,则在 CHotel 中创建包装函数来执行您希望在外部执行的操作。

即 std::cout << Hotel.getTouristName(1);

代替

std::cout << Hotel.getTourist(1)->getName();

于 2013-04-13T10:24:19.980 回答