gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:21 26 4
gpt4 key购买 nike

我正在上讲师设计的“通用树”类(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com