【问题标题】:c++ array of type class [closed]类型类的c ++数组[关闭]
【发布时间】:2016-04-06 17:53:35
【问题描述】:

我刚刚开始学习 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() 的问题以及如何使用访问器/修改器函数。任何帮助将不胜感激。

【问题讨论】:

  • Restaurant mimmos; - 不是数组,string menu = mimmos.Menu; - 不可访问

标签: c++ arrays class


【解决方案1】:

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

string getMenu();

第二个尝试将'mimmos'视为一个数组,而事实上它是一个单独的实例。由于上面的评论表明它试图获取有关第三班的信息。您有两个选择:将“getShifts”函数更改为采用索引参数:

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

然后您将通过以下方式获得有关第三班的信息:

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

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

string* getShifts();

那么你会写:

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

【讨论】:

    【解决方案2】:

    这段代码存在树问题:

    string menu = mimmos.Menu;
    

    菜单在 Restaurant 类中被声明为私有。

    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;
    

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

    std::string::operator[]

    【讨论】:

      【解决方案3】:

      因为您只创建了 Restaurant 类的单个对象,而不是 array,所以您不能在那里与 index 一起使用。

      你应该如下使用

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

      还可以访问private 变量公开public 方法,该方法将返回Menu 字段。

      希望这会有所帮助。

      【讨论】:

      • 阅读 getShifts 行正上方的评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2012-11-30
      • 1970-01-01
      相关资源
      最近更新 更多