通过指向类的指针调用类函数

时间:2015-12-25 14:32:29

标签: c++ class pointers

假设我们有以下类:

    class Cell
    {
    private:
        int x;
        Cell *next;
    public:
        Cell(int a)
        {
              x = a;
        }
        int getX()
        {
              return x;
        }
        Cell *getNext()
        {
              return next;
        }

     };

以及休息班:

    class Snake
    {
    private:
        Cell *tail;
    public:
        Snake()
        {
            Cell newCell(10);
            tail = &newCell;
        }
        Cell *getTail()
        {
            return tail;
        }
    };

这是我们的主要功能:

      int main()
      {
           Snake newSnake;
           int a = newSnake.getTail()->getX();
           cout << a << endl;
           return 0;
       }

当我执行我的代码时,我得到了输出:

      -858993460     

预计输出为:

       10

我似乎无法解决问题是什么,任何想法?

2 个答案:

答案 0 :(得分:1)

 tail = &newCell; 

此行将导致未定义的行为。超出范围后newCell被销毁,tail仍指向那里可能是任何东西(正确值,0,随机值或......)

解决您的问题:

首先,我认为整个设计已经破裂,需要进行审核。但是,我会在不触及设计的情况下以更少的可能更改来纠正错误。

改变这个:

   Snake()
    {
        Cell newCell(10);
        tail = &newCell;
    }

为:

   Snake()
    {
        Cell newCell(10);
        tail = new Cell(10);;
    }

并添加:

   ~Snake()
    {
        delete tail;
    }

答案 1 :(得分:0)

是的,这是正确的方法。当您键入

ptr->getX()

相同
(*(ptr)).getX()

您也可以随时查看->运营商的reference