带有成员变量vector的C ++类<another class =“”> </another>

时间:2013-04-13 09:53:24

标签: c++ class vector

我有一个关于在一个国家建立关于度假村的信息系统的任务,能够从/到文件读/写数据并修改它。

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:
.....
};

还有一个类度假村包含第二类对象的成员变量向量

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

所以这就是问题所在。我不知道如何为该向量变量编写访问器,变换器和构造函数,因此我可以使用它们的属性。感谢您的检查,如果有人能帮助我弄清楚这些功能,我将非常感激!

3 个答案:

答案 0 :(得分: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函数添加到您的酒店类,该类返回其名称的字符串。 这也允许您使用SetName等。

答案 1 :(得分:1)

1)访问者,mutator:有很多选择。

您可以创建另一个类,例如CTouristList(和CHotelList),它包装vector,从CHotel类引用它(访问器方法如{{ 1}}和CTouristList& CHotel::GetTouristList())并实施const CTouristList& CHotel::GetTouristList() constCTouristList::AddCTouristList::Remove等方法。

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

2)构造函数。构造函数中没有任何东西需要。但是对于CHotel,您可能需要vector<CHotel*>中的析构函数来明确释放CResort个实例。虽然不确定为什么要使用指针CHotel

答案 2 :(得分: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()将成为向量&lt;&gt; .size();

的包装器

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

即。     std :: cout&lt;&lt; Hotel.getTouristName(1);

而不是

std :: cout&lt;&lt; Hotel.getTourist(1) - &GT;的getName();