精华内容
下载资源
问答
  • 静态成员函数作用

    2020-11-23 16:56:48
    静态成员函数主要为了调用方便,不需要生成对象就能调用。 比如: class X ...静态成员函数作用基本上相当于:一个带有命名空间的全局函数。 如一个数学类定义了一些函数 都可以声明伪静态的 Ma...
    静态成员函数主要为了调用方便,不需要生成对象就能调用。
    比如:
    class X
    {
     public:
       void MethodA();
       static void MethodB();
    }

    此时MethodB可以直接调用,X::MethodB();
    MethodA必须先生成类对象才能调用,X x; x.MethodA();

    函数的行为对所有派生类都一致时,可以声明为静态。

    静态成员函数的作用基本上相当于:一个带有命名空间的全局函数。 

    如一个数学类定义了一些函数 都可以声明伪静态的 Math.sin(x)等,使用静态成员函数好处很多,但所有的好处都是基于:它跟类的实例无关,只跟类有关,不需要this指针

    至于可重入问题,非静态成员函数也有啊。为什么单单问静态函数的可重入问题。

    比如:

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

    (2)由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部。因为系统API的回调函数通常都是那种非成员函数(孤立函 数),没有this指针的。比如你可以在类的内部写一个线程函数供CreateThread创建线程用,如果没有静态函数,那么这种回调函数就必须定义成 全局函数(非静态成员函数指针无法转换成全局函数指针),从而影响了OO的“封装性”。

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

    行是行,只是不爽:就为了一个根本无状态存储可言的数学函数还要引入一次对象的构造和一次对象的析构,当然不爽。而且既然有了对象,说不得你还得小心翼翼的定义拷贝构造函数、拷贝赋值运算符等等,对于一些纯算法的东西显然是不合适的。

     

    (4)总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的。

            以上只是一些基本的考虑,并不是绝对的。绝对东西的只有一点:“静态函数不需要实例化就可以被调用,不会也不可以调用或操纵非静态成员”。记住这一点,那么实际编程中何时需要用,何时适合用,自然就更容易作出决定了。

    展开全文
  • c++静态成员函数作用

    千次阅读 2019-06-18 14:08:22
    静态成员函数主要为了调用方便,不需要生成对象就能调用。 比如: class X { public: void MethodA(); static void MethodB(); } 此时MethodB可以直接调用,X::MethodB(); MethodA必须先生成类对象才能调用...
    静态成员函数主要为了调用方便,不需要生成对象就能调用。
    比如:
    
    class X
    {
    public:
        void MethodA();
        static void MethodB();
    }

    此时MethodB可以直接调用,X::MethodB();
    MethodA必须先生成类对象才能调用,X x; x.MethodA();


    函数的行为对所有派生类都一致时,可以声明为静态。

    静态成员函数的作用基本上相当于:一个带有命名空间的全局函数。 

    如一个数学类定义了一些函数 都可以声明伪静态的 Math.sin(x)等

     

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

    至于可重入问题,非静态成员函数也有啊。为什么单单问静态函数的可重入问题。

    比如:

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

     

    (2)由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部。因为系统API的回调函数通常都是那种非成员函数(孤立函 数),没有this指针的。比如你可以在类的内部写一个线程函数供CreateThread创建线程用,如果没有静态函数,那么这种回调函数就必须定义成 全局函数(非静态成员函数指针无法转换成全局函数指针),从而影响了OO的“封装性”。

     

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

    行是行,只是不爽:就为了一个根本无状态存储可言的数学函数还要引入一次对象的构造和一次对象的析构,当然不爽。而且既然有了对象,说不得你还得小心翼翼的定义拷贝构造函数、拷贝赋值运算符等等,对于一些纯算法的东西显然是不合适的。

     

    (4)总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的。

            以上只是一些基本的考虑,并不是绝对的。绝对东西的只有一点:“静态函数不需要实例化就可以被调用,不会也不可以调用或操纵非静态成员”。记住这一点,那么实际编程中何时需要用,何时适合用,自然就更容易作出决定了。

    展开全文
  • 静态成员函数作用

    千次阅读 2012-09-26 23:38:53
    一、可以实现某些特殊的设计模式:如Singleton...比如你可以在类的内部写一个线程函数供CreateThread创建线程用,如果没有静态函数,那么这种回调函数就必须定义成全局函数(非静态成员函数指针无法转换成全局函数指针
    一、可以实现某些特殊的设计模式:如Singleton; 
    

    二、由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部。因为系统API的回调函数通常都是那种非成员函数(孤立函数),没有this指针的。比如你可以在类的内部写一个线程函数供CreateThread创建线程用,如果没有静态函数,那么这种回调函数就必须定义成全局函数(非静态成员函数指针无法转换成全局函数指针),从而影响了OO的“封装性”。

    三、可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好,比如定义一个数学函数类Math,调用Math::sin(3.14);如果非要用非静态函数,那就必须:
    Math   math;
    math.sin(3.14);
    行是行,只是不爽:就为了一个根本无状态存储可言的数学函数还要引入一次对象的构造和一次对象的析构,当然不爽。而且既然有了对象,说不得你还得小心翼翼的定义拷贝构造函数、拷贝赋值运算符等等,对于一些纯算法的东西显然是不合适的。


    四、总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的。

    展开全文
  • 静态成员函数必须作用于某个具体对象,静态成员函数并不具体作用于某个对象 静态成员不需要通过对象就能访问。 静态成员变量本质是全局变量,静态成员函数本质是全局函数。 静态成员函数不能为虚函数。 静态成员函数...
  • C++类中的静态成员变量和静态成员函数作用
  • 静态成员函数存在的意义

    千次阅读 2019-04-29 14:27:08
    静态成员函数的特点: 被类的所有的对象共有,不属于某一个对象。通过类名::就可以直接调用。 跟普通的成员函数比,没有隐藏的this指针作为参数。这一点可用于封装线程类。 静态成员函数只可以访问静态...

    静态成员函数的特点:

    1. 被类的所有的对象共有,不属于某一个对象。通过类名::就可以直接调用。

    2. 跟普通的成员函数比,没有隐藏的this指针作为参数。这一点可用于封装线程类。

    3. 静态成员函数只可以访问静态成员变量。

    4. 静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。

    展开全文
  • 静态数据成员和静态成员函数

    万次阅读 多人点赞 2018-08-26 19:18:35
    c++中的static静态数据成员和静态成员函数应该是让大家比较头疼的东西,好像也是找工作公司面试中常常问到的东西。我自己也深有体会,在学习c++的过程中,总感觉static很烦人,但是又是一个必须懂的东西,所以今天就...
  • 静态成员:静态类中的成员加入static修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态成员,因为静态成员...
  • C++中,静态成员函数不能被声明为virtual函数。  例如,下面的程序会编译失败。 #include<iostream> class Test { public: // 编译错误:static成员函数不能声明为virtual virtual static ...
  • 这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你很快回忆起来。 复习C语言的static关键字 (1)加在局部变量的前面...
  • 关于静态成员函数

    千次阅读 多人点赞 2017-09-19 14:02:55
    关于静态成员函数 静态成员是受到private限定符的作用的,若用private修改,不可外部访问的  static对象如果出现在类中,那么该对象即使从未被使用到,它也会被构造以及析构。而函数中的static对象,如果该函数...
  • C++静态成员函数 与数据成员类似,成员函数也可以定义为静态的,在类中声明函数的前面加static就成了...与静态数据成员不同,静态成员函数作用不是为了对象之间的沟通,而是为了能处理静态数据成员。 我们知道,当调
  • 声明静态成员 使用类的静态成员 定义静态成员 静态成员的类内初始化 静态成员能用于某些场景,而普通函数不能
  • 昨天在修改项目函数功能时,在其中一个类中添加了一个静态成员变量和两个静态成员函数,结果在链接时出现一个非常典型的错误:“The follwing symbols referenced in processor “p0” could not be resolved:Class:...
  • 可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.  ...
  • C++静态成员函数

    千次阅读 2019-05-01 17:17:30
    与静态数据成员不同,静态成员函数作用不是为了对象之间的沟通,而是为了能处理静态数据成员。 静态成员函数没有this指针。既然它没有指向某一对象,也就无法对一个对象中的非静态成员进行默认访问(即在引用数据...
  • 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量。(因为静态成员变量在对象创建之前就已经被分配了内存空间)静态成员变量虽然在类中,但它并不是随对象的...
  • 成员函数:无论静态函数还是非静态函数,都是属于类的(这一点与数据成员的静态静态不同),对象并不拥有函数的拷贝.两者的区别在于:非静态的函数由类对象(加.或指针加->;)调用,这时将向函数传递this指针.而静态...
  • 和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要...静态成员函数作用是为了能处理静态数据成员。 可以说,静态成员函数与非静态成员函数的根本区别是:
  • 首先要明白:静态成员函数是可以调用非静态数据成员的,具体怎么调用,看下面。 class A { public: static void fun ( A a ) { cout << b <<endl;(错误) cout <&l...
  • **************************数据成员的初始化 *******************************************************************************************************************1、数据成员是否能在定义类的时候就初始化?...
  • 类中的静态成员函数属于全局函数属于所有该类对象共有,不是属于某单独的一个类的对象,类中普通成员函数是单独的对象所拥有;既然说静态成员函数属于全局函数,那么为什么不向其他全局函数一样写在类的外部呢?原因...
  • 静态函数成员与普通函数成员一样,在ELF 文件中都只会保留一份copy,它们的区别体现在:静态成员函数可以在不定义对象的情况下直接调用,而非静态成员函数不行。 class X { public: void f1(){
  • 楼主小白,请教一下大家,为什么C++中,静态成员函数可以在类中定义。 如 ``` class A { public: static void func() { cout ; } }; ``` 而静态成员变量却不能在类里面定义 ``` ...
  • C++静态成员变量和静态成员函数使用总结

    万次阅读 多人点赞 2016-05-16 09:11:58
    C++静态成员变量和静态成员函数使用总结: 一.静态成员变量:   类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/...
  • 普通成员函数和静态成员函数

    千次阅读 2018-03-25 19:47:25
    类成员包括数据成员和成员函数。 两者区别 1分配内存的时间不同 静态成员属于类本身,不属于具体类对象,在类加载时分配内存空间,程序结束时才消失。可以类名直接访问。 普通成员属于类对象,在类对象创建...
  • 静态数据成员: 就是说在...静态成员函数,一般这些函数都是用来对这个类进行操作的。例如,你要修改一个静态成员数据,那么需要静态成员函数。你可以这么想: 静态时,大体的一个类; 动态时,具体的一个类中的对象...
  • 静态成员函数4.普通函数 一,面向过程中的static 1.静态全局变量 在全局变量前,加上关键字static,该变量就定义成为一个静态全局变量 static int n = 5; //静态全局变量 int m = 3; //全局变量,默认为extern int...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 200,463
精华内容 80,185
关键字:

静态成员函数的作用