函数没有参数c ++

时间:2014-06-19 03:19:57

标签: c++ function pointers parameters tree

我想了解如何在没有参数的情况下编写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(){}

3 个答案:

答案 0 :(得分:1)

由于getHeightNode的成员,因此可以访问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;}

您还可以通过不同方式命名方法和数据。

这就是经常使用getHeightsetHeight的原因。有些人更喜欢成员访问方法为height的约定,因此将成员数据重命名为int height_或其他一些。

答案 2 :(得分:1)

我认为从概念上讲,你在这里误解了一些东西。

从OOP的角度来看,你想要达到什么样的高度?

对于您的第一个函数,“Node * N”参数是对象。

现在,当你想从函数调用和声明中取出参数时,它必须使用你给出的完全任意的“高度”,或者你需要把getheight()作为Node的一个成员class,以便返回Node的高度。