[初学C++]静态成员

静态成员变量和成员函数

在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。类的静态成员,属于类,也属于对象,但终归属于类。

静态成员变量

//声明
static 数据类型 成员变量; //在类的内部
//初始化
数据类型 类名::静态数据成员 = 初值; //在类的外部
//调⽤用
类名::静态数据成员
类对象.静态数据成员
1)static 成员变量实现了同类对象间信息共享。
2)static 成员类外存储,求类大小,并不包含在内。
3)static 成员是命名空间属于类的全局变量,存储在 data 区。
4)static 成员只能类外初始化。
5)可以通过类名访问(无对象生成时亦可),也可以通过对象访问。

静态成员函数

//声明
static 函数声明
//调⽤用
类名::函数调⽤用
类对象.函数调⽤用
1)静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员, 完成对静态数据成员的封装。
2)静态成员函数只能访问静态数据成员。原因:非静态成员函数,在调用时this指针被当作参数传进。而静态成员函数属于类,而不属于对象,没有 this 指针。

class  Student 
{ 
public: 
    Student(int  n,int  a,float  s):num(n),age(a),score(s){}  
    void  total() 
    { 
        count++; 
        sum  +=  score;  
    } 
    static  float  average(); 
private:  
    int  num; 
    int  age; 
    float  score;  
    static  float  sum;  
    static  int  count; 
}; 
float  Student::sum  =  0;  
int  Student::count  =  0; 
float  Student::average()  { 
    return  sum/count; 
}           
int  main()  
{ 
    Student  stu[3]=  {  
        Student(1001,14,70),  
        Student(1002,15,34),  
        Student(1003,16,90) 
    }; 
    for(int  i=0;  i<3;  i++)  { 
        stu[i].total(); 
    }                  
    cout<<Student::average()<<endl; 
    return  0;  
}

处理机制

C++类对象中的成员变量和成员函数是分开存储的
成员变量:普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式
静态成员变量:存储于全局数据区中
成员函数:存储于代码段中。

1、C++类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型仍然有效!
2、C++中类的普通成员函数都隐式包含一个指向当前对象的this指针。
3、静态成员函数、成员变量属于类
4、静态成员函数与普通成员函数的区别:
静态成员函数不包含指向具体对象的指针
普通成员函数包含一个指向具体对象的指针

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.C和C++的区别?C++的特性?面向对象编程的好处? 答:c++在c的基础上增添类,C是一个结构化语言,它的重...
    杰伦哎呦哎呦阅读 9,690评论 0 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 近来网上的各种大补鸡汤都煲得差不多了,敢不敢来尝尝我这碗清淡的小米粥。 作为芬芳扑鼻的鲜花,从不主动追逐蝴蝶蜜蜂,...
    培阳冰琳阅读 1,184评论 8 8
  • 时间在流逝,不知不觉我成了最晚离开教室的人,睁着酸涩的眼睛从屏幕前移开,虚成一条缝,嗯,该回去了。 这个夜晚...
    sola游阅读 368评论 0 0
  • “训练”,多好听的词,教员们使用它时多自然,多少人言之灼灼地用它做实践或理论的根据,多少人把它作为目的。 人,是用...
    你他娘的真是个天才阅读 219评论 0 0