【问题标题】:What are the most common uses of static class functions in C++?C++ 中静态类函数最常见的用途是什么?
【发布时间】:2010-07-05 02:12:28
【问题描述】:

我今天正在学习 C++ 中的静态类函数,但我真的不明白它们有什么用?谁有一些可以成功应用的好例子?

谢谢,博达·赛多。

【问题讨论】:

    标签: c++ class function static


    【解决方案1】:

    类的静态成员函数只是普通(非成员)函数。你知道普通函数有什么用,对吗?因此,出于同样的原因,静态成员函数也适用于同样的事情。

    只是有时普通函数与类的关系很紧密,所以将其声明为类的静态成员而不是将其声明为完全独立的独立函数是有意义的。它可以帮助您表达函数与类具有紧密关系的事实。此外,这赋予该函数对类内部的完全访问权限 - 对其私有成员和受保护成员。

    后者实际上使得使用静态成员函数实现一些有用的编程习惯用法和模式成为可能。例如,搜索“静态构造函数”习语。

    【讨论】:

    • 但是静态函数不能访问私有成员和受保护成员,是吗?它只能访问类中的其他静态数据吗?我说的对吗?
    • @bodacydo:不完全是。当/如果给定一个指向该玻璃实例的指针时,静态函数可以访问该类的私有和受保护成员。静态函数没有的是隐含的this参数,所以如果你需要一个类的实例来访问,你必须自己显式地将它传递给函数。
    • 不,你错了。如果你有一个类A 和静态方法s() 和私有成员p,传入的实例允许s() 访问p。或者s() 可以实例化A 并填充p。那种东西。
    • @bodacydo:不,这不正确。如果静态成员函数无法访问私有成员,“静态构造函数”习语就无法工作,因为这样做的目的是使普通构造函数成为私有成员。
    • @bodacydo : 有关命名构造函数的成语(静态构造函数)parashift.com/c++-faq-lite/ctors.html#faq-10.8,请参见此处
    【解决方案2】:

    静态类类似于命名空间,但它们提供保护(受保护和私有),并且可以转换为模板(是的,裸函数也可以,但它们有一些限制,有时使包装类模板更容易甚至是必要的) .

    【讨论】:

      【解决方案3】:

      静态成员函数可用于对静态常量数据成员执行重要的初始化。例如,您可能有一个在某个类中使用的静态常量容器。静态成员函数可用于创建容器实例,该实例被返回并复制到静态常量数据成员中。

      【讨论】:

        【解决方案4】:

        考虑“全球性”。正如您所学习的,一个非静态函数对单个对象进行操作,而一个静态函数由一个类的所有对象共享 - 那么......所有这些对象有什么共同点?

        这取决于您的班级,但请考虑“摘要信息”。想想数据。想想类的所有对象的共同点。也许每个都有一个特定于自身的运行总计,但您还想要一个全局总计?沿着这些思路思考......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-12
          • 2020-12-17
          • 2013-12-25
          相关资源
          最近更新 更多