类型类的c ++数组

时间:2016-04-06 17:53:36

标签: c++ arrays class

我刚开始学习c ++。我在赋值中有一个问题:使用main()函数考虑以下类声明。 main()函数中有两个错误。为他们命名并解释如何修复它们。

//Question Three Start
#include <iostream>
#include <string>
using namespace std;

class Restaurant
{
public:
    Restaurant();
    int getTables();
    int getTempStaff();
    int getPermStaff();
    string getShifts();
private:
    string Menu;
    int Tables;
    int TempStaff;
    int PermStaff;
    string Shifts[3];
};

int main()
{
    Restaurant mimmos;
    //.........(additional code)
    string menu = mimmos.Menu;
    //.........(additional code)
    //get information about shift 3
    cout << "Shift info:" << mimmos[2].getShifts() << endl;
    return 0;
}

我知道第一个问题是成员变量Menu是私有的,但我不知道如何解决mimmos [2] .getShifts()的问题以及如何使用accessor / mutator函数。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

您正确识别的第一个是由访问私有成员引起的。修复?返回菜单的公共成员函数:

string getMenu();

第二种是无效的对待mimmos&#39;作为一个数组,当事实上它是一个单一的实例。由于上面的评论表明它是试图获得有关第三班的信息。你有两个选择:改变&#34; getShifts&#34;函数获取索引参数:

string getShift(size_t n) {
    return Shifts[n];
}

然后你会通过写下来获得关于第3班的信息:

cout << "Shift info: " << mimmos.getShift(2) << std::endl;

或者更改getShifts()以返回数组指针:

string* getShifts();

然后你会写:

cout << "Shift info: " << mimmos.getShifts()[2] << std::endl;

答案 1 :(得分:0)

此代码存在树问题:

string menu = mimmos.Menu;

菜单在餐厅课程中被宣布为私人。

Restaurant mimmos;
//get information about shift 3
cout << "Shift info:" << mimmos[2].getShifts() << endl;

“mimmos”是单个对象而不是数组。在这种情况下,方括号运算符“[]”用于访问数组成员。

另外根据上面的评论说:“获取有关班次3的信息”

您想要访问班次号码3,但“getShifts”函数的返回类型是单字符串对象。因此,即使您将方括号移到函数前面:

cout << "Shift info:" << mimmos.getShifts()[2] << endl;

您将获得一个char(字符串的第3个字符)。

std::string::operator[]

答案 2 :(得分:-1)

因为您只创建Restaurant课程的单个对象,而不是array,因此您无法使用index

您应该使用如下

cout << "Shift info:" << mimmos.getShifts() << endl;

另外,要访问private变量,请展示public方法,该方法将返回Menu字段。

希望这有帮助。