1

我有一个形状类,我从我的main程序初始化并在构造函数中给出参数。

Shape *cusomShape = new CustomShape(float radius, float origin)

形状类具有翻转等一些功能。
当触发形状类中的翻转功能时,我想更改程序int中的某个值main。这可能类似于在触发翻转函数时触发更改值的事件,但我不确定如何在 C++ 中执行此操作。如果事件是这里的理想方法,那么很高兴看到一个简短的例子。

如果使用事件不正确,那么理想的方法是什么?

4

3 回答 3

3

我认为您需要的是通过指针或对 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;
}
于 2013-01-09T09:05:45.810 回答
2

在构造函数中传递对变量的引用并保存该引用。需要时更改值。

于 2013-01-09T09:06:16.320 回答
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;
};

在这种情况下,如果您有成员函数更改输入参数,您应该采用定义此类函数的样式:例如,确保被成员函数更改的变量始终是其声明中的第一个输入参数。

如果您希望复杂对象在彼此之间传递更新,您可以使用观察者模式

于 2013-01-09T09:19:25.960 回答