繁体   English   中英

C ++静态对象类函数

[英]C++ static object Class function

一些代码:请参阅下面的类myClass。 它有一个构造函数和一个公共递归函数查找。 请看代码:

#include <iostream>
using namespace std;

class myClass{
    public:

    myClass() {
        //do stuff
    }

    int find(int i) {
        static int j = 10;

        if (i > 15)
            return i;

        j = j + 1;
        return i * find(j + 1);
    }
};

int main() 
{

    myClass mC1 ,mC2;

    cout<< " 1.... return value = "<< mC1.find(10);
    cout<< " \n 2... return value = "<< mC2.find(10);

    return 1;
}

输出:

1.... return value = 5241600 
2.... return value = 170

上面的progemn有一个类myclass有一个函数find ..“find”函数有一个变量。 这是静态的,因为我想要一个递归函数。 问题是静态变量有一个程序的生命和绑定到类。

但是我希望静态是对象 specfic而不是范围。 我希望两个函数调用都返回相同的值。

简单地说,如何在类函数中创建静态变量,是每个对象而不是整个类...

你需要一个成员变量吗?

希望以下代码有所帮助。

最好的问候山姆

class myClass{
  public 
  myClass() {
   m_j = 10;
  }

  private:
   int m_j; // private member variable for find algorithm; 


  int find(int i) {
    if(i>15)
      return i;
    m_j= m_j+1;
    return i * find(m_j+1);

   }

};

如果需要每个对象变量,则需要使其成为相应对象的成员。 无法在函数内声明特定于对象的变量。 您使用static成员的方式无论如何都可以更改为非静态,即您将获得必要的上下文:使函数非静态并根据需要将数据存储在对象中。

也就是说,仅仅因为函数是递归的并不意味着它需要任何类型的static上下文。 通常,所有必要的上下文都作为参数传递给递归函数,在这种情况下,系统在堆栈上保持必要的状态。 由于堆栈的大小相对有限,因此您需要确保在具有深度调用堆栈的递归函数中不需要太多上下文。

由于您可能不希望要求用户传入某些内部上下文,因此接口中的find()函数可能只会委托给提供必要上下文的递归函数。 例如:

int find(int j, int i) {
    if (15 < i) {
        return i;
    }
    ++j;
    return i * find(j, j + 1);
}
int find(int value) {
    return find(10, value);
}

(我不确定我是否得到了正确的逻辑,因为我没有得到函数的意思......)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM