如何从C+中的类成员函数自身定义递归调用该类成员函数+;? 我是C++的新手,我需要一个类成员函数来调用它自己的定义,比如这个-< class MyClass { public: // or private: ? // Some code here // ... void myfunction(); // ... }; void MyClass::myfunction() { // Some code here // ... // Call MyClass::myfunction() here, but how? // ... }
但是我不知道它的正确语法,如果可能的话,如果不创建这样的对象-如何从C+中的类成员函数自身定义递归调用该类成员函数+;? 我是C++的新手,我需要一个类成员函数来调用它自己的定义,比如这个-< class MyClass { public: // or private: ? // Some code here // ... void myfunction(); // ... }; void MyClass::myfunction() { // Some code here // ... // Call MyClass::myfunction() here, but how? // ... },c++,function,class,c++11,C++,Function,Class,C++11,但是我不知道它的正确语法,如果可能的话,如果不创建这样的对象-object\u name.member\u function() 而且,如果myfunction()属于public:或private:,会有什么区别吗?由于函数不是静态的,您已经有了一个实例可以操作了 void MyClass::myfunction() { // Some code here // ... this->myfunction(); // ... } 您可以将this->关
object\u name.member\u function()
而且,如果myfunction()
属于public:
或private:
,会有什么区别吗?由于函数不是静态的,您已经有了一个实例可以操作了
void MyClass::myfunction()
{
// Some code here
// ...
this->myfunction();
// ...
}
您可以将this->
关闭,我只是想更清楚地了解如何调用函数。myfunction()
在类的范围内,因此您可以“简单地”调用它:
但是,请注意,这将导致堆栈溢出。您需要一种停止递归的方法
但是我不知道它的正确语法,如果可能的话,如果不创建这样的对象-object\u name.member\u function()
使用:
this->mufunction()
可以替换为myfunction()
。使用此
是一种风格选择,可以让像我这样的人更容易阅读代码
如果myfunction()
属于public:
或private:
,会有什么区别吗
不,不会的。您可以从另一个成员函数调用该类的任何成员函数 成员函数实际上是语法糖的一种形式。它们描述了一个函数,该函数以某种方式秘密地获取指向对象实例的指针,该对象实例在函数内部可作为this
访问
struct Foo {
vod bar();
};
Foo foo;
foo.bar();
在这里的调用中,您真正要做的是调用Foo::bar(&Foo)代码>和bar
实际上是在用指针Foo*这个
。实现方式因实现而异,一些编译器/体系结构将使用特殊寄存器来跟踪当前对象
另外一个语法糖块使成员函数中的所有成员变量和函数对您可见,就好像它们是局部作用域一样
struct Foo {
int i;
int add(int n) {
return i + n;
}
int addx2(int n) {
return add(n) * 2;
}
};
这里实际发生的是:
return this->i + n;
及
这意味着很容易遇到本地名称和成员名称之间存在冲突的情况
struct Foo {
int i;
Foo(int i) {
i = i; // not what you expected
}
};
出于这个原因,许多工程师小心地使用大小写或前缀或后缀来帮助他们区分成员、参数和变量
struct Foo { // Uppercase for types and functions
int m_i; // m_ for member
Foo(int i_, int j_) {
int i = sqrt(i));
m_i = i + j_;
}
int Add(int i) {
return i_ + i;
}
};
人们使用各种不同的模式-一些人使用\u name
表示成员,一些人使用name
和fn
表示成员
struct Foo {
int i_;
int add_(int _i) {
return i_ + _i;
}
};
最重要的是要保持一致。myfunction()
是正确的,如果您在正确的范围内。请确保myfunction()
的函数定义正确(即它在声明和定义中都指定了返回类型)。对不起,我忘了写返回类型。这个->
在这里是不必要的,不是吗?因为范围是隐式的。有没有理由不建议只使用myfunction()
@EyasSH是的,正如我提到的,这是不必要的,我用它来说明一点,即函数正在从对象的当前实例中调用。谢谢。我正在使用的函数有一个停止递归的基本条件,这里的代码只是为了理解这个问题。谢谢你回答中的最后一行。你可以省略显式的this->
,直接称它为myfunction()
。@RemyLebeau:是的,我可以。科里克拉默的回答也是如此。
struct Foo {
int i;
Foo(int i) {
i = i; // not what you expected
}
};
struct Foo { // Uppercase for types and functions
int m_i; // m_ for member
Foo(int i_, int j_) {
int i = sqrt(i));
m_i = i + j_;
}
int Add(int i) {
return i_ + i;
}
};
struct Foo {
int i_;
int add_(int _i) {
return i_ + _i;
}
};