我有一个形状类,我从我的main
程序初始化并在构造函数中给出参数。
Shape *cusomShape = new CustomShape(float radius, float origin)
形状类具有翻转等一些功能。
当触发形状类中的翻转功能时,我想更改程序int
中的某个值main
。这可能类似于在触发翻转函数时触发更改值的事件,但我不确定如何在 C++ 中执行此操作。如果事件是这里的理想方法,那么很高兴看到一个简短的例子。
如果使用事件不正确,那么理想的方法是什么?
我认为您需要的是通过指针或对 Shape 中的函数的引用传递一个值,然后对其进行修改。如果该函数不是从 main 调用,而是从其他地方调用,则传递指针是您更好的选择。首先将指针传递给类并使用另一种方法存储它,然后每次调用翻转时都使用它。
编辑:示例:
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;
}
在构造函数中传递对变量的引用并保存该引用。需要时更改值。
我建议将对变量的引用传递给需要更改其值的成员函数。在类中存储引用将 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;
};
在这种情况下,如果您有成员函数更改输入参数,您应该采用定义此类函数的样式:例如,确保被成员函数更改的变量始终是其声明中的第一个输入参数。
如果您希望复杂对象在彼此之间传递更新,您可以使用观察者模式。