我有一个我从main
程序初始化的形状类,并在构造函数中提供参数。
Shape *cusomShape = new CustomShape(float radius, float origin)
形状类有一些功能,如翻转等。
当触发shape类中的rollover函数时,我想更改int
程序中的某个main
值。这可能类似于在触发翻转函数时触发更改值的事件,但我不确定如何在C ++中执行此操作。如果有的话,事件是理想的方法,很高兴看到一个简短的例子。
如果使用该事件不正确,那么理想的方法是什么?
答案 0 :(得分:3)
我认为你需要的是通过指针或引用传递值到Shape中的函数,然后修改它。如果函数不是从main调用的,而是从其他地方调用,则传递指针是更好的选择。首先将指针传递给类并使用另一种方法存储它,然后每次调用rollover都使用它。
编辑:示例:
class CustomShape {
void storePointer(int* _value) {
value = _value;
}
void rollover() {
.. do stuff
*value++; // for instance
... do stuff
}
int * value;
}
int main() {
int a;
CustomShape cs;
cs.storePointer(&a);
....
cs.rollover();
....
return 0;
}
答案 1 :(得分:2)
在构造函数中传递对变量的引用并保存该引用。需要时更改值。
答案 2 :(得分:0)
我建议将对变量的引用传递给需要更改其值的成员函数。在类中存储引用将Shape类与引用相结合。这意味着每次要使用Shape而不更新整数时,都不能,因为Shape构造函数会期望将int的引用/指针作为参数(Shape类将把指针/引用存储为属性) 。将引用/指针传递给成员函数可以促进低耦合。
#include <iostream>
class Shape
{
double shapeValue_;
public:
Shape (double value)
:
shapeValue_(value)
{}
void fireFunction(int& updateMe)
{
updateMe = 123;
}
};
using namespace std;
int main()
{
int update;
cout << update << endl;
Shape s(4.5);
s.fireFunction(update);
cout << update << endl;
return 0;
};
在这种情况下,您可以选择不涉及fireFunction上的形状对象调用的主程序:
int main()
{
Shape s(4.5);
// Main program that doesn't use fireFunction.
return 0;
};
在这种情况下,如果你有成员函数改变输入参数,你应该采用一种样式来定义这样的函数:例如确保成员函数更改的变量始终是其声明中的第一个输入参数。
如果您希望复杂对象在彼此之间传递更新,则可以使用Observer Pattern。