从类函数更改int值

时间:2013-01-09 09:03:27

标签: c++ algorithm

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

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

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

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

3 个答案:

答案 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