Внутри метода манипулируйте возвращаемым значением другого метода C ++

c++ class methods return

28 просмотра

2 ответа

У меня есть класс с несколькими методами, определенными. Есть один метод, который просто возвращает значение из переменной-члена. Есть еще один метод, который я хотел бы «обновить» возвращенное значение из предыдущего метода, внутри этого метода.

Пример: (предположим, что объявления для X уже были сделаны в файле .hpp)

A::A() { 
    X = 800; //constructor initialising x & y
    Y = 1;
}
A::funcA() { 
    return Y;
}
A::funcB() { 
    if (x > y) {
        //make funcA now return 2 ...
    }

Я могу установить Y как значение, которое мне нужно, но как мне вызвать funcA, чтобы «обновить» значение, возвращаемое новым значением YI? Когда я пытаюсь позвонить: funcA () == 2; Кажется, он не обновляется должным образом.

Автор: Marcus Источник Размещён: 08.11.2019 11:24

Ответы (2)


0 плюса

Простейшим способом было бы обновить значение Y, так как возвращаемое значение beng.

A::A() { 
    X = 800; //constructor initialising x & y
    Y = 1;
}
A::funcA() { 
    return Y;
}
A::funcB() { 
    if (x > y) {
        Y = 2;
}
Автор: Ayush Gupta Размещён: 20.08.2016 02:11

0 плюса

В вашем примере не хватает нескольких вещей, таких как возвращаемые значения и каково будет возвращаемое значение, если x

Просто решите, funcA()что вернуть:

int A::funcA(){
    if (x > y) {
        return Y; // or return 2 or whatever, just an example

    return X;
}

Или иметь специальное «возвращаемое значение»

class A
{
  private:
    int X,Y,retA;

  public:        

    A()
    { 
      X = 800; //constructor initialising x & y
      Y = 1;
      retA=Y;
    }

    int funcA() { 
      return retA;
    }

    funcB() { 
      if (x > y) {
        retA = 2;
      }
    }
}

Вы можете даже пойти на указатель, если вы хотите переключаться между двумя переменными. Это предотвращает копирование значения, но не позволяет вернуть значение, отличное от одного из сохраненных значений.

class A
{
  private:
    int X,Y;
    int* retA;

  public:        

    A()
    { 
      X = 800; //constructor initialising x & y
      Y = 1;
      retA=&Y;
    }

    int funcA() { 
      return *retA;
    }

    funcB() { 
      if (x > y) {
        retA = &X;  
        //do NOT use retA = 2 here, that would be invalid
        // *retA = 2 would be possible, but change either X or Y
      }
      else {
        retA = &Y;
      }
    }
}
Автор: Anedar Размещён: 20.08.2016 02:21
Вопросы из категории :
32x32