C++ 构造函数中需要什么,setter函数中需要什么?

C++ 构造函数中需要什么,setter函数中需要什么?,c++,arrays,constructor,C++,Arrays,Constructor,目标是输出与第一个程序相同的数据。 第一个程序需要手动输入房间号和房间成本。第二个(有问题的)程序要求它自动填充房间号和房间成本,并硬编码到主数据库中的数组中。 需要类“room”的默认构造函数来填充数组,并添加setter函数来设置房间号和成本的值。 整个程序的目标是创建阵列,填充测试数据,然后列出有关房间的数据。 程序1(手动输入)-工作正常 #include<iostream> using namespace std; class room { int roomNo

目标是输出与第一个程序相同的数据。 第一个程序需要手动输入房间号和房间成本。第二个(有问题的)程序要求它自动填充房间号和房间成本,并硬编码到主数据库中的数组中。 需要类“room”的默认构造函数来填充数组,并添加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 ();
}
#包括
使用名称空间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:不客气。仅供参考,作为提问者,您可以“投票”并将答案标记为已接受。目前,答案仅标记为已接受。(如果这是您的意图,请忽略)