Можно ли использовать функцию в классе для изменения значения переменной в другом классе c ++. Я хочу использовать класс manger для изменения цены в классе событий или цены в функции.

#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>
#include <cstdio>
#include <sstream>

using namespace std;

class Manager {
public:
    void Changevalue() {
        //Changes the value of a variable some where in events class.
    }
};

class Event {
    //variable
    void price() {
        int price;
    }
};

int main() {
    Manager a;
    Event b;
    a.Changevalue();// use to change the value of a variable in the events class

    return 0;
}
c++
0
VB6 Dev 22 Май 2014 в 05:39
2
Вы должны стараться избегать таких отношений. Данные класса должны быть дискретной единицей и не должны изменяться извне. Сцепление плохое.
 – 
smiling_nameless
22 Май 2014 в 05:43
Если вам нужно сделать это в классе Event, объявите Manager как друга.
 – 
Jerry Jeremiah
22 Май 2014 в 05:43
На самом деле функция price() выглядит совершенно бесполезной — ни ввода, ни вывода, ни даже побочного эффекта, и компилятор, вероятно, оптимизирует эту «переменную».
 – 
David K
22 Май 2014 в 05:49

6 ответов

Лучший ответ

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

#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>
#include <cstdio>
#include <sstream>

using namespace std;

class Event {
    int price;
    public:
    void setPrice(int p) {
        price = p;
    }
};

class Manager {
    Event *event;
    public:
    Manager(Event * e) : event(e) {}
    void ChangeValue() {
        //Changes the value of a variable some where in events class.
        event->setPrice(5);
    }
};


int main() {
    Event b;
    Manager a(&b);
    a.ChangeValue();// use to change the value of a variable in the events class

    return 0;
}
0
merlin2011 22 Май 2014 в 05:50

Скорее всего, вы можете передать событие функции ChangeValue в качестве аргумента. Затем вы можете использовать любые методы получения или установки, которые предоставляет класс.

0
ojblass 22 Май 2014 в 05:43

Вы можете добавить диспетчер классов в качестве друга класса к событию класса. Просто добавьте участника в событие класса:

class Event
{
public:
  friend class Manager;
  int price;
  void price()
  {

  }

Но цена также должна быть членом классового события, иначе вы не сможете изменить значение переменной в функции. Потому что это локальная переменная.

1
Kill Console 22 Май 2014 в 05:46

Пусть Manager принимает Event в качестве аргумента:

Event e;
Manager m(e);

Затем добавьте функцию-член в Event, которую Manager может вызывать для изменения своего значения.

0
kirbyfan64sos 22 Май 2014 в 05:44

В: Можно ли использовать функцию в классе для изменения значения переменной в другом классе?

A: Конечно. Есть много способов. Например:

1) Вы можете просто сделать "price" публичным членом "Event" - так что любой может изменить его в любое время. Обычно это плохо ...

2) Вы можете сделать Manager.ChangeValue () другом Event:

http://www.cprogramming.com/tutorial/friends.html

3) Или, что лучше всего, вы можете создать метод получения / установки в «Событии».

ПРЕДОСТЕРЕЖЕНИЕ:

// Questionable
class Event {
public:
    void price() {
        int myPrice;  // The scope of this variable exists *ONLY INSIDE THE FUNCTION*
    }
};

// Better
class Event
private:
  int price;
public:
  int getPrice() { return price; }
  void setPrice (int p) { price = p; }
0
FoggyDay 22 Май 2014 в 05:51

Да.

  1. Если переменная в классе Event равна public static, вы можете получить к ней прямой доступ

    void Changevalue()
    {
      Event::someVar = someValue; 
    }
    
  2. Если это не static, а public, вам понадобится объект Event, значение которого вы измените

    void Changevalue(Event& evt)
    {
      evt.someVar = someValue;
    }
    
  3. Если это не static или public, вам понадобится объект Event и метод public в Event, с помощью которого вы измените значение

    void Changevalue(Event& evt)
    {
      evt.ChangeSomeValue( someValue); //this is the best approach in OOP world
    }
    

Где будет класс Event

class Event {

  pulbic:
     void ChangeSomeValue( someType someValue);
  //other code
};
2
Rakib 22 Май 2014 в 06:15