【发布时间】:2020-03-10 21:15:29
【问题描述】:
目标是输出与第一个程序相同的数据。 第一个程序需要手动输入房间号和房间费用。第二个(有问题的)程序要求它自动填充房间号和房间成本,这些房间号和房间成本被硬编码到主数组中。 需要一个“房间”类的默认构造函数来填充数组并添加 setter 函数来设置房间号和成本的值。 整个程序的目标是创建数组,填充测试数据,然后列出房间的数据。 程序 1(手动输入) - 这很好用;
#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 ();
}
第二个(有问题的)程序;
#include<iostream>
using namespace std;
class room
{
int roomNo;
float roomCost;
public:
room();
void PutData ();
};
room::room()
{
cout<<"\n\t\t\t"<<roomNo<<" \t|\t "<<roomCost;
}
void room::PutData ()
{
cout << "\n\t\t\t" << roomNo << " \t|\t " << roomCost;
}
int main ()
{
int roomNo[10] = {1,2,3,4,5,6,7,8,9,10};
float roomCost[10] = {100.00, 90.00, 85.50, 80.00, 80.00, 50.00, 50.00, 45.50, 45.50, 40.00};
room roomList[10]; //Statement 3 : Creating Array of 3 Employees
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 (int roomNo = 0; roomNo < 10; roomNo++)
roomList[roomNo].PutData();
getchar ();
getchar ();
}
【问题讨论】:
-
构造函数应该将对象初始化为有效状态,仅此而已。它不应该做输出或输入。第二个示例中的构造函数不进行任何初始化,它只是打印 uninitialized 成员及其 indeterminate 值,这会导致 未定义行为。
-
仅供参考:
int roomNo[10]没有理由存在于第二个示例中。无论如何它都被循环变量隐藏了。
标签: c++ arrays constructor