使用类中的函数来更改另一个类c ++中变量的值

时间:2014-05-22 01:39:42

标签: c++

是否可以使用类中的函数来更改另一个类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;
}

6 个答案:

答案 0 :(得分:2)

  1. 如果Event类中的变量为public static,您可以直接访问它

    void Changevalue()
    {
      Event::someVar = someValue; 
    }
    
  2. 如果不是static而是public,则需要一个Event的对象,您可以在其中更改值

    void Changevalue(Event& evt)
    {
      evt.someVar = someValue;
    }
    
  3. 如果既不是static也不是public,那么您需要在Event中使用publicEvent方法的对象。改变价值

    void Changevalue(Event& evt)
    {
      evt.ChangeSomeValue( someValue); //this is the best approach in OOP world
    }
    
  4. Event类将在哪里

    class Event {
    
      pulbic:
         void ChangeSomeValue( someType someValue);
      //other code
    };
    

答案 1 :(得分:1)

您可以将类管理器添加为类事件的友元类。 只需将一个成员添加到类事件:

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

  }

但是价格也应该是类事件的成员,或者你不能改变函数中变量的值。因为它是一个局部变量。

答案 2 :(得分:0)

您可以将Event作为参数传递给ChangeValue函数。然后,您可以使用该类提供的任何getter或setter方法。

答案 3 :(得分:0)

ManagerEvent为参数:

Event e;
Manager m(e);

然后,在Event上添加Manager可以调用以更改其值的成员函数。

答案 4 :(得分:0)

我根据您代码的当前结构对您尝试执行的操作做了一些假设。例如,我假设您要设置对象的变量,而不是类的变量,因为您声明了对象。

#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;
}

答案 5 :(得分:0)

问:是否可以使用类中的函数来更改另一个类中变量的值?

答:好的。有很多方法。例如:

1)你可以简单地让“价格”成为“事件”的公共成员 - 所以任何人都可以随时改变它。这通常是坏事......

2)你可以让Manager.ChangeValue()成为Event的朋友:

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

3)或者,可以说是最好的,你可以在“Event”中创建一个getter / setter方法

CAVEAT:

// 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; }