精华内容
下载资源
问答
  • 类静态成员函数定义

    千次阅读 2017-11-16 11:37:15
    类静态成员函数定义
    #include <iostream>
    using namespace std;
    /*
    1.
    为了管理静态成员,c++提供了静态函数,以对外提供接口。
    并静态函数只能访问静态成员。
    */

    class Student{
    public:
    Student(int n,int a,float s):num(n),age(a),score(s){}
    void total(){
    count++;
    sum += score;
    }
    //2.static 函数声明 
    static float average();
    private:
    int num;
    int age;
    float score;
    static float sum;
    static int count;
    };
     float Student::sum = 0;
     int Student::count = 0;
     //3.类名::函数调用
    float Student::average(){
      return sum/count;
    }
    int main(){
    Student stu[3]= {
    Student(1001,14,70),
    Student(1002,15,34),
    Student(1003,16,90)
       };
       //3.类对象.函数调用
    for(int i=0; i<3; i++){
     stu[i].total();
    }
     cout<<Student::average()<<endl;
     return 0;
    }
    //输出64.67 
    /*
    总结 
    1,静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员,
        完成对静态数据成员的封装。
        2,静态成员函数只能访问静态数据成员。
    原因:非静态成员函数,在调用时 this指
              针时被当作参数传进。而静态成员函数属于类,而不属于对象,没有 this 指针。
    */

    展开全文
  • 相关文章 1.静态成员变量和静态成员函数诞生顺序,以及为什么诞生(使用场景)? 2.有无this指针?...而静态成员函数并不属于某一对象(所有对象共有,没有this指针,不能访问本中非静态成员,有点...

    相关文章

    1.静态成员变量和静态成员函数诞生顺序,以及为什么诞生(使用场景)?
    2.有无this指针?
    3.和类以及对象的关系?
    4.如何定义以及访问的方式与普通成员变量和普通成员函数的区别?
    5.是怎么分配内存的?
    当调用一个对象的非静态成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不属于某一对象(所有对象共有,没有this指针,不能访问本类中非静态成员,有点惨),它与任何对象都无关。
    可以说静态成员函数的出现就是为了处理静态成员变量的。
    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。


    静态成员的声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>,非静态成员则不能
    static成员变量属于类(被存放在数据段中),不属于某个具体的对象(具体对象的内存是分配在堆中的),即使创建多个对象,也只为该变量分配一次内存,所有对象使用的都是这份内存中的数据。若它为public类型,当某个对象修改了它,也会影响到其他对象,所有对象都是“同甘共苦的”


    c++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类外初始化,且不能使用static关键字。我们一般选择在类的实现文件中实现它(定义(为其分配内存),初始化)。


    例子:C++ Primer关于静态成员举了个例子,是说一个银行账户类需要一个数据成员来表示当前的利率。在这个类中,我们所希望的是利率与类相关联,而不是与类的每个对象相关联。这个时候就可以用静态成员函数,可以提高效率,而且一旦利率浮动,每个对象也能相应使用新的值。

    静态变量通过类来调用,也可以通过具体对象来调用,但非静态变量只能通过具体对象来调用

    //如下,静态:
    A::func(); 
     //或
    A a;
    a.func();
    //非静态只有:
    A a;
    a.func();

     

    展开全文
  • 楼主小白,请教一下大家,为什么C++中,静态成员函数可以在定义。 如 ``` class A { public: static void func() { cout ; } }; ``` 而静态成员变量却不能在里面定义 ``` ...
  • 函数如下,在C++中声明静态成员变量的时候,在中只是进行了声明,并没有实际的申请出指针的内存,真正的内存是定义初始化的时候才会进行内存的申请,因此,又因为static类型的变量都是随着的,因此不能随着对象...

    C++ 的静态成员变量为什么一定要在类外定义

    函数如下,在C++中声明静态成员变量的时候,在类中只是进行了声明,并没有实际的申请出指针的内存,真正的内存是定义初始化的时候才会进行内存的申请,因此,又因为static类型的变量都是随着类的,因此不能随着对象的创建而申请内存,所以需要单独的进行类外定义,在定义的时候C++编译器会申请内存给静态指针。

    #include <iostream>
    
    using namespace std;
    
    class Singleton
    {
    private:
        Singleton()
        {
            cout << "sluggard singleton construct start." << endl;
        }
    
    public:
        static Singleton *getInstance(void)
        {
            if(NULL == m_psl) // 懒汉式,每次获取实例都要判断,在多线程中会存在问题
            {
                m_psl = new Singleton;
            }
            return m_psl;
        }
    
        static void FreeInstance()
        {
            if(NULL != m_psl)
            {
                delete m_psl;
                m_psl = NULL;
            }
        }
    private:
        static Singleton *m_psl;
    };
    
    Singleton *Singleton::m_psl = NULL;
    
    // 懒汉式,只有在使用的时候才会去创建
    // 存在的问题,多个线程同时首次调用时,可能会出现创建多次的问题(导致内存泄漏)
    
    int main(int argc, char const *argv[])
    {
        
        // 使用功能去全局获取接口获取资源
        Singleton *p1 = Singleton::getInstance(); 
        Singleton *p2 = Singleton::getInstance();
    
        if(p1 == p2)
        {
            cout << "p1 equal p2" << endl;
        }
        else
        {
            cout << "p1 not equal p2" << endl;
        }
        
        // 手动释放单例模式创建的唯一一个对象
        Singleton::FreeInstance();
     
        cout << "singleton." <<  endl;
        return 0;
    }
    
    
    
    
    展开全文
  • 今天清理手机微信没用的数据【惊人啊,删了1G+的图...回忆了一下,当时讨论的是:为啥成员函数类外定义时,函数名不能加static?       class Point { public: void init() { } static void o...
     

    今天清理手机微信没用的数据【惊人啊,删了1G+的图,再删删其它没用的数据,腾出来3G+的空间】
    无意间发现了一张以前聊天时候的图。

    回忆了一下,当时讨论的是:为啥成员函数在类外定义时,函数名不能加static?

     

     

     

    class Point  
    {  
    public:   
        void init()  
        {    
        }  
        static void output()  
        {  
        }  
    };  
    void main()  
    {  
     
    } 

     

    这种在类结构的里面定义静态函数,用static修饰函数名很正常。

     

     

     

     

     

     

    class Student    
    {
    public:  
        static void PrintfAllStudents();
    };    
    void Student::PrintfAllStudents()  
    {  
      
    }  
    void main()    
    {     
    
    }  

    但是这样在类内声明,在类外定义的,就不能再加static了。
    static常用的两个作用,一个是作用域限制,一个是生存期限制。
    对函数来说:
    作用域限制:被static修饰的函数,只能用于代码本身文件的调用。
    生存期限制:对函数来说,这条是用来说类的静态成员函数的。在类对象出生前,类的静态成员函数就活着了。

    如果类外定义函数时在函数名前加了static,因为作用域的限制,就只能在当前cpp里用,
    类本来就是为了给程序里各种地方用的,其他地方使用类是包含类的头文件,而无法包含类的源文件。
    这样就导致无法在其他地方调用这个静态的类成员函数。如果要解决这个办法,就是在头文件中加extern。
    然而extern和static是一对儿对立的关键字,不能用在一起。


    所以在类外实现类成员函数时,函数名前加个static修饰符就报错了。

    展开全文
  • 《C++ 静态成员变量与静态成员函数的声明及定义》 1、静态成员变量 声明:static 类型名 变量名; 初始化:类型名 类名::变量名=初始值; 2、静态成员函数 声明:static 函数返回值类型 函数名(参数1,参数2,…);...
  • 的静态成员与静态成员函数

    千次阅读 2020-08-14 22:49:54
    声明静态成员 使用静态成员 定义静态成员 静态成员内初始化 静态成员能用于某些场景,而普通函数不能
  • 代码描述:实现客户机(CLIENT)定义字符型静态数据成员ServerName,...定义静态函数ChangeServerName()改变服务器名称。 #include using namespace std; class Client { public: Client(); ~Client(); voi
  • 静态数据成员和静态成员函数

    万次阅读 多人点赞 2018-08-26 19:18:35
    c++中的static静态数据成员和静态成员函数应该是让大家比较头疼的东西,好像也是找工作公司面试中常常问到的东西。我自己也深有体会,在学习c++的过程中,总感觉static很烦人,但是又是一个必须懂的东西,所以今天就...
  • 类静态数据员 内能声明定义初始化必须类外
  • 关于静态成员函数

    千次阅读 多人点赞 2017-09-19 14:02:55
    关于静态成员函数 静态成员是受到private限定符的作用的,若用private修改,不可外部访问的  static对象如果出现在中,那么该对象即使从未被使用到,它也会被构造以及析构。而函数中的static对象,如果该函数...
  • 但是在有些情况下只能使用静态成员函数,比如内绑定自身成员函数作为回调函数,这种情况在开启多线程时很常见,如果不想将回调定义为全局那只能定义静态了,为了避免过度破坏封装中应当尽量不要让静态成原...
  • 解释一:举个例子,Base是一个,data是他的int型static数据成员,那么我们这么定义:int Base::data = 10;1、因为使用static数据成员时,都是Base::data。。。。这么来用的,编译器知道data是在Base的作用域内,...
  • 多态,即多种状态(形态)。简单来说,我们可以将多态定义为消息以多种形式显示的能。 多态是以封装和继承为基础的。 C++ 多态分类及实现: ... 参数多态性(Parametric Polymorphism,编译期):模板、函数模...
  • #include <stdio.h> class A { public: void f1() { printf("A::f1\n"); } }; class B { public: void f2() { printf("B::f2\n");...//声明静态对象 ...//必须在类外定义,否则会链接出...
  • c++ 静态成员函数用static 关键字来声明,用于处理静态成员变量,可以用类名来调用,也可以用对象名来调用。 测试代码: #include <iostream> using namespace std; class Point{ public: Po...
  • 静态成员函数调用方式--收藏帖子

    千次阅读 2018-12-13 17:14:56
    静态成员函数调用方式 A:: s_fun();//不需要额外传递一个参数,作为this 指针;因为静态函数,属于,不属于具体对象。非静态成员函数调用方式 。非静态成员函数,属于对象,需要隐式传递 this 指针作为参数...
  • #include<iostream> using namespace std; class cat { public: cat() { numOfCats++; } static int getNumOfCats() { return numOfCats; } ~cat() { numO.
  • 静态成员函数是属于的,不属于任何一个的对象,可以通过作用域以及的对象访问,本身就是一个实体,所以不能定义为虚函数。 如果构造函数定义为虚函数,则需要通过查找虚函数表来进行调用。但是构造函数是虚...
  • C++中的(static)静态成员变量与(static)静态成员函数

    万次阅读 多人点赞 2018-08-04 11:27:28
    而在C++的中,也有静态成员变量同时还有静态成员函数,先来看看C++中静态成员变量与静态成员函数的语法: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class ...
  • 【C++深度剖析教程5】C++中静态成员函数

    万次阅读 多人点赞 2017-12-15 01:35:29
    先给大家推荐一个C++面试题集锦吧,保证能让你在众多面试者脱颖而出,点击...C++中静态成员变量)。 我们回顾一下客户的需求: -统计在程序运行期间某个的对象的数目 -保证程序的安全性(不能使用全局变量)
  • 昨天在修改项目函数功能时,在其中一个中添加了一个静态成员变量和两个静态成员函数,结果在链接时出现一个非常典型的错误:“The follwing symbols referenced in processor “p0” could not be resolved:Class:...
  • Python:普通成员函数类成员函数静态函数 Python 中的也是一个普通对象,如果需要直接使用这个,例如将作为参数传递到其他函数中,又希望在实例化这个之前就能提供某些功能,那么最简单的办法就是使用 ...
  • 定义一个Student,要求使用静态数据成员或静态成员函数计算5个学生的《计算机导论》课程的总成绩和平均成绩。请同学们自行设计该。 【提示】 静态数据成员:static int total; 表示所有同学成绩总分 静态成员...
  • 虚函数与静态成员函数

    千次阅读 2019-06-02 22:04:54
    C++中,静态成员函数不能被声明为virtual函数。 例如,下面的程序会编译失败。 #include class Test { public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { } }; 同样地,静态成员...
  • 静态成员和静态成员函数

    千次阅读 2017-07-24 15:52:50
    一、静态成员的特点:(1)static数据成员在的内部声明,但只能在的外部定义,在的外部不能指定static,在定义时候进行初始化; (2)static数据成员只能在的外部进行初始化(特例:当整型const static...
  • 来自:C++语言程序设计,清华大学计算机教材,P186 5-7; 具体代码如下: #include <iostream> using namespace std; class cat{ public: ... static int getnumofcats(){return numofcats;... s
  • 静态成员和静态成员函数的总结

    千次阅读 2018-12-20 23:01:01
    一、静态成员的特点: (1)static数据成员在的内部声明,但只能在的外部定义,在的外部不能指定static,在定义时候进行初始化; (2)static数据成员只能在的外部进行初始化(特例:当整型const ...
  • C++中的静态成员变量和静态成员函数的作用

    万次阅读 多人点赞 2014-05-14 18:22:06
    数据成员可以分为静态变量、非静态变量两种。 静态成员:静态

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 319,527
精华内容 127,810
关键字:

静态成员函数类外定义

友情链接: sample1.rar