我想了解如何在没有参数的情况下编写getheight
函数,它仍然有效。
我的node.h文件
Node();
~Node();
int getHeight(Node* node);
//int getHeight(); without a parameter but those two can perform the same work
int data;
int height;
Node* left;
Node* right;
node.cpp:
int node::height(Node *N){
if (N == NULL)
return 0;
return N->height;
}
//if I do not put the Node pointer into this function as a parameter, how should I write this function?
int node::height(){}
答案 0 :(得分:1)
由于getHeight
是Node
的成员,因此可以访问Node
对象的成员。你可以return height;
。这与执行return this->height;
相同。
当然,他们没有执行“同样的工作”。一个返回指针传递的Node
的高度作为参数,而另一个返回this
的高度。事实上,你似乎没有充分的理由拥有一个指针的版本。它尤其不应该是成员函数,因为它不依赖于this
的状态。如果你真的想要一个带有这种签名的函数,我建议把它变成一个使用成员getHeight
的非成员函数:
int getHeight(Node *N) {
if (N == NULL)
return 0;
return N->getHeight();
}
如果在接收空指针时返回0的唯一原因是为了避免运行时错误,我建议改为使用该函数:
int getHeight(Node& N) {
return N.getHeight();
}
答案 1 :(得分:1)
[这可能不是您的问题,但评论时间太长。]
尝试写作时:
int node::height(){}
您可能尝试过:
int node::height(){ return height;}
这当然会产生编译错误。一种方法是返回height
成员的值,但实际上返回指向成员函数本身的指针。
你可以写:
int node::height(){ return this->height;}
您还可以通过不同方式命名方法和数据。
这就是经常使用getHeight
和setHeight
的原因。有些人更喜欢成员访问方法为height
的约定,因此将成员数据重命名为int height_
或其他一些。
答案 2 :(得分:1)
我认为从概念上讲,你在这里误解了一些东西。
从OOP的角度来看,你想要达到什么样的高度?
对于您的第一个函数,“Node * N”参数是对象。
现在,当你想从函数调用和声明中取出参数时,它必须使用你给出的完全任意的“高度”,或者你需要把getheight()作为Node的一个成员class,以便返回Node的高度。