我正在学习由老师设计的“通用树”类(class),但无法理解其中的概念。 里面有一个函数返回给用户,包含最高值的节点,下面是它的代码。
const Node<T> * getLargestNode() const {
return getLargestNodeHelper(root);
}
我知道我们需要一个辅助函数,因为我们需要递归地执行它,因此需要一个参数。因此,需要一个辅助函数来将根作为参数传递,因为根不能作为主函数的参数传递,因为不需要访问内部数据成员。 下面是辅助函数的代码
private:
static const Node<T> * getLargestNodeHelper(const Node<T> * node) {
if (node == NULL) {
return NULL;
}
const Node<T> * largest = node;
for (int i = 0; i < node->children.size();i++) {
const Node<T> * childlargest = getLargestNodeHelper(node->children[i]);
if (childlargest->data > largest->data) {
largest = childlargest;
}
}
return largest;
}
现在,当我尝试自己创建相同的类时,我创建了辅助函数,如下所示,
private:
const Node<T> * getLargestNodeHelper(const Node<T> * node) const {
if (node == NULL) {
return NULL;
}
const Node<T> * largest = node;
for (int i = 0; i < node->children.size();i++) {
const Node<T> * childlargest = getLargestNodeHelper(node->children[i]);
if (childlargest->data > largest->data) {
largest = childlargest;
}
}
return largest;
}
现在,我的疑问是,使用我的辅助函数版本是否有任何缺点。两者之间有什么区别,因为两者都不能更改数据成员并且都不能从对象调用?
最佳答案
如果您的方法不是静态的,您需要该类的对象才能调用它(即使它不关心您调用它的对象)。根据具体情况,这会带来创建虚拟对象并销毁它的开销,只是为了使用它一次来调用。
静态方法可以在没有对象的情况下调用。
关于c++ - 类中私有(private)静态方法和私有(private)方法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41538595/