C++静态成员函数的作用

 2024-02-18 01:02:59  阅读 0

静态成员函数主要为了调用方便,不需要生成对象就能调用。

比如:

class X
{
public:
    void MethodA();
    static void MethodB();
}

这时候就可以直接调用了,X::();

static成员函数的作用_成员函数的功能_static成员函数

调用前必须生成一个类对象,X x; X。();

当函数的行为在所有派生类中保持一致时,可以将函数声明为静态。

静态成员函数基本上做同样的事情:具有命名空间的全局函数。

例如,如果一个数学类定义了一些函数,它可以声明伪静态Math.sin(x)等。

好处有很多,但所有的好处都是基于:它与类的实例无关,只与类有关,并且不需要this指针

至于可重入问题,还有非静态成员函数。 为什么只问静态函数的可重入性。

例如:

(1) 可以实现某些特殊的设计模式:例如;

(2)由于没有this指针,所以可以将一些系统API回调函数以静态函数的形式封装在类内部。 因为系统API的回调函数通常都是没有this指针的非成员函数(隔离函数)。 例如,您可以在类内部编写线程函数来创建线程。 如果没有静态函数,那么这个回调函数必须定义为全局函数(非静态成员函数指针无法转换为全局函数指针),从而影响OO“封装性”。

(3) 可以封装某些算法,比如数学函数,比如ln、sin、tan等,这些函数不一定属于任何对象,所以感觉从类中调用比较好,比如定义一个数学函数函数类Math,调用Math::sin(3.14); 如果必须使用非静态函数,则必须: Math math; 数学.sin(3.14);

没关系,但我只是不高兴:只是为了一个根本没有状态存储的数学函数,它必须引入对象构造和对象销毁,我当然不高兴。 而现在有了对象,就得仔细定义复制构造函数、复制赋值运算符等,这对于一些纯粹算法的东西来说显然是不合适的。

(4)简而言之,从OOA/OOD的角度来看,所有无需实例化即可具有某种行为的函数都应该设计为静态的。

以上只是一些基本的考虑,并不绝对。 只有一件事是绝对正确的:“静态函数无需实例化即可调用,非静态成员不会也不能被调用或操作。” 考虑到这一点,就可以更容易地决定何时需要它以及何时适合在实际编程中使用它。

标签: 函数 静态 指针

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码