1

我正在编写一个小人计算机模拟,我想重载索引运算符 []。我创建了一个名为 LMC 的类并完成了以下操作:

#include <iostream>

using namespace std;

class LMC
{
   public:
       LMC();
       void display();
       int& operator[](int index);
       ~LMC();
   private:
       int **array;
};

LMC::LMC()
{
   array = new int*[100];
   for(int i = 0; i < 100; i++)
   {
       array[i] = new int[3];
   }
   return array;
}

void LMC::display()
{
    for(int i = 0; i < 100;i++)
    {
       for(int j = 0; j <3;j++)
       {
          array[i][j] = 0;
          array[i][2] = i;
          cout << array[i][j]<<" ";
       }
       cout << endl;
    }
 }
 int& LMC::operator[](int index)
 {
    return array[index][2];
 }

  LMC::~LMC()
  {
     for(int i =0; i < 100 ; i++)
     { 
        delete [] array[i];
     }
     delete [] array;
     array = NULL;
  }

  int main()
  {
     LMC littleman;
     while(true)
     {
         int mailbox;
         int function;
         cout << "What is Mailbox number?" << endl;
         cin >> Mailbox;
         cout << "What is the function you want to use?" <<endl;
         cin >> finction;
         //the function is numbers eg 444 and 698;
         littleman.display();
         littleman[Mailbox] = function;
      }
     return 0;
}

我可以毫无错误地运行程序。当我这样说时mailbox = 0function = 123这没问题。

显示如下:

0 0 0
1 0 0
2 0 0
3 0 0
//continuing to 99

这个显示是错误的。必须显示以下内容:

0 0 123
1 0 0
2 0 0
//continuing to 99

我是否有逻辑错误,或者我是否覆盖了数组以显示原始内容,我该如何解决?

4

2 回答 2

1

您的代码有许多错误,它们不会让它编译,即:

  • LMC()构造函数中,你有return array;. 构造函数从不返回任何东西(它们甚至没有返回类型),所以你不能return在它们中使用。
  • 之后void LMC::display(),你有一个;,这是一个错误,因为这不是定义,而是实现。你应该忽略它,然后离开void LMC::display() { <...> }
  • void LMC::display()最后错过了}结束,就在operator[].
  • main()你有错别字Mailbox(一种情况下是大写 M,另一种情况下是正常 m。在 C++中Mailboxmailbox不同的变量)而finction不是函数。

至于您的问题,您正在重写函数中的 aray 的值display()

array[i][j] = 0;
array[i][2] = i;

这就是为什么你看不到任何结果。

于 2012-09-06T10:20:07.473 回答
0

这些行

  array[i][j] = 0;
  array[i][2] = i;

LMC::display()销毁您要显示的数组的内容。

此外,在 末尾有一个额外的分号void LMC::display();,因此您的代码不应该编译。

于 2012-09-06T10:18:57.907 回答