C++ C++;静态对象类函数
一些代码: 请看下面的myClass类。它有一个构造函数和一个公共递归函数find。请参阅代码:C++ C++;静态对象类函数,c++,class,object,static,C++,Class,Object,Static,一些代码: 请看下面的myClass类。它有一个构造函数和一个公共递归函数find。请参阅代码: #include <iostream> using namespace std; class myClass{ public: myClass() { //do stuff } int find(int i) { static int j = 10; if (i > 15)
#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;
}
上面的程序有一个类myclass,它有一个函数find。。“find”函数有一个变量。这是静态的,这是必需的,因为我想要一个递归函数。问题是静态变量具有程序的生命周期&绑定到类
但是,我希望静态是对象特定的,而不是类范围。我希望两个函数调用返回相同的值
简单地说,如何使类函数中的静态变量为每个对象而不是整个类…是否需要成员变量 希望下面的代码有帮助 致意 萨姆
}) 如果需要每个对象变量,则需要使其成为相应对象的成员。无法将函数中的变量声明为特定于对象。您使用
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);
}
intfind(intj,inti){
if(15
(我不确定我是否得到了所需的逻辑正确,因为我没有完全理解函数的作用……)
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);
}
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);
}