我有一个关于在一个国家建立关于度假村的信息系统的任务,能够从/到文件读/写数据并修改它。
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:
.....
};
所以这就是问题所在。我不知道如何为该向量变量编写访问器,变换器和构造函数,因此我可以使用它们的属性。感谢您的检查,如果有人能帮助我弄清楚这些功能,我将非常感激!
答案 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() const
,CTouristList::Add
,CTouristList::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();