是否可以使用类中的函数来更改另一个类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;
}
答案 0 :(得分:2)
是
如果Event
类中的变量为public static
,您可以直接访问它
void Changevalue()
{
Event::someVar = someValue;
}
如果不是static
而是public
,则需要一个Event
的对象,您可以在其中更改值
void Changevalue(Event& evt)
{
evt.someVar = someValue;
}
如果既不是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
};
答案 1 :(得分:1)
您可以将类管理器添加为类事件的友元类。 只需将一个成员添加到类事件:
class Event
{
public:
friend class Manager;
int price;
void price()
{
}
但是价格也应该是类事件的成员,或者你不能改变函数中变量的值。因为它是一个局部变量。
答案 2 :(得分:0)
您可以将Event作为参数传递给ChangeValue函数。然后,您可以使用该类提供的任何getter或setter方法。
答案 3 :(得分:0)
让Manager
以Event
为参数:
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; }