c++ - 类中私有(private)静态方法和私有(private)方法之间的区别

标签 c++ static tree constants private

我正在学习由老师设计的“通用树”类(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/

相关文章:

swift - 如何在 Swift 中初始化 Struct 中的变量一次

algorithm - 是否有计算最短树(不是路径)的算法?

c++ - C++ 控制台输出问题

c++ - 为什么这里没有省略复制构造函数?

c++ - 以下单例实现线程安全吗?

c - 多个文件中的静态函数

c++ - 数组 C++ 获取值

调用 main 函数方法时发生 Java 引用错误

java - 树中的第一个元素变为空? Guava TreebasedTable

algorithm - 对带有修改的树路径的查询