C++ 构造函数中需要什么,setter函数中需要什么?
目标是输出与第一个程序相同的数据。 第一个程序需要手动输入房间号和房间成本。第二个(有问题的)程序要求它自动填充房间号和房间成本,并硬编码到主数据库中的数组中。 需要类“room”的默认构造函数来填充数组,并添加setter函数来设置房间号和成本的值。 整个程序的目标是创建阵列,填充测试数据,然后列出有关房间的数据。 程序1(手动输入)-工作正常C++ 构造函数中需要什么,setter函数中需要什么?,c++,arrays,constructor,C++,Arrays,Constructor,目标是输出与第一个程序相同的数据。 第一个程序需要手动输入房间号和房间成本。第二个(有问题的)程序要求它自动填充房间号和房间成本,并硬编码到主数据库中的数组中。 需要类“room”的默认构造函数来填充数组,并添加setter函数来设置房间号和成本的值。 整个程序的目标是创建阵列,填充测试数据,然后列出有关房间的数据。 程序1(手动输入)-工作正常 #include<iostream> using namespace std; class room { int roomNo
#include<iostream>
using namespace std;
class room
{
int roomNo;
float roomCost;
public:
void GetData ();
void PutData ();
};
void room::GetData ()
{
cout << "\n\tEnter room number : ";
cin >> roomNo;
cout << "\n\tEnter room cost : ";
cin >> roomCost;
}
void room::PutData ()
{
cout << "\n\t\t\t" << roomNo << " \t|\t " << roomCost;
}
int main ()
{
int roomNo;
room roomList[10];
for (roomNo = 0; roomNo < 10; roomNo++)
{
cout << "\nEnter details of " << roomNo + 1 << " room" << endl;
roomList[roomNo].GetData ();
}
cout <<"\n*******************************************************************************";
cout << "\n\t\t\t Room Details";
cout <<"\n*******************************************************************************";
cout << "\n\t\t Room Number \t| Cost per Night";
cout << "\n\t\t--------------------------------------";
for (roomNo = 0; roomNo < 2; roomNo++)
roomList[roomNo].PutData();
getchar ();
getchar ();
}
#包括
使用名称空间std;
教室
{
国际房间号;
浮动成本;
公众:
void GetData();
void PutData();
};
void room::GetData()
{
房间号;
房间成本;
}
空房间::PutData()
{
cout您应该有两个setter,每个成员一个,然后像
for (int n = 0; n < 10; n++)
{
roomList[n].setNumber(roomNo[n]);
roomList[n].setCost(roomCost[n]);
}
for(int n=0;n<10;n++)
{
房间列表[n]。设置编号(房间编号[n]);
roomList[n].setCost(roomCost[n]);
}
(另一方面,您应该对第一个程序执行相同的操作,并在main
中处理用户输入)您应该有两个setter,每个成员一个,然后像
for (int n = 0; n < 10; n++)
{
roomList[n].setNumber(roomNo[n]);
roomList[n].setCost(roomCost[n]);
}
for(int n=0;n<10;n++)
{
房间列表[n]。设置编号(房间编号[n]);
roomList[n].setCost(roomCost[n]);
}
(另一方面,您应该对第一个程序执行相同的操作,并在main
中处理用户输入)问题是roomNo
和roomCost
从来没有为每个room
实例设置过任何值。该类不会自动从main
中定义的数组中提取
另外,
roomList[roomNo].PutData();
访问未初始化的数据:
void room::PutData ()
{
cout << "\n\t\t\t" << roomNo << " \t|\t " << roomCost;
}
然后使用向量
进行初始化(而不是房间列表[10]
)
std::向量室;
客房预订(10间);
对于(尺寸i=0;i<10;++i)
房间。安置(房间编号[i],房间成本[i]);
问题是roomNo
和roomCost
从来没有为每个room
实例设置任何值。该类不会自动从您在main
中定义的数组中提取
另外,
roomList[roomNo].PutData();
访问未初始化的数据:
void room::PutData ()
{
cout << "\n\t\t\t" << roomNo << " \t|\t " << roomCost;
}
然后使用向量
进行初始化(而不是房间列表[10]
)
std::向量室;
客房预订(10间);
对于(尺寸i=0;i<10;++i)
房间。安置(房间编号[i],房间成本[i]);
构造函数应将对象初始化为有效状态,仅此而已。它不应进行输出或输入。第二个示例中的构造函数不进行任何初始化,它只打印未初始化的成员及其不确定的值,这会导致未定义的行为。仅供参考:int roomNo[10]
在第二个示例中没有存在的理由。它仍然被循环变量隐藏。构造函数应该将对象初始化为有效状态,仅此而已。它不应该进行输出或输入。第二个示例中的构造函数不进行任何初始化,它只打印未初始化的成员及其不确定值导致未定义的行为。仅供参考:int roomNo[10]
在第二个示例中没有存在的理由。它被循环变量隐藏了。非常感谢您的回答。我现在有了关于这个的格子,它更有意义。非常感谢您的回答。我现在有了关于这个的格子,它更有意义。非常感谢您的回答,这是我的第一次体验vector和blimey is的演示确实可以省去一些麻烦。也感谢您的现场演示,非常感谢。@rodders:不客气。仅供参考,作为提问者,您可以“向上投票”并将答案标记为已接受。目前,答案仅标记为已接受。(如果这是您的意图,请忽略)非常感谢您的回答,这是我第一次体验vector,天哪,这确实省去了一些麻烦。也感谢您的现场演示,非常感谢。@rodders:不客气。仅供参考,作为提问者,您可以“投票”并将答案标记为已接受。目前,答案仅标记为已接受。(如果这是您的意图,请忽略)