类的静态成员的操作规范

目录

类的静态成员变量与静态成员函数

对类的静态成员变量直接操作

用类的静态成员函数初始化静态成员变量

静态成员为什么声明必须在类内,定义必须在类外?

为什么静态成员变量的处理必须要用静态成员函数?


 

类的静态成员变量与静态成员函数

对类的静态成员变量直接操作

#include <iostream>  
using namespace std;  
  
class Cstudent  
{  
private:  
    int mark;  
    float height;  
public:  
    static int master_num;  
    Cstudent(int Dmark, float Dheight) :mark(Dmark), height(Dheight){} // 不可用于初始化静态成员变量  
};  
  
int Cstudent::master_num = 0; // 必须在类外初始化类的静态成员变量,因为静态成员变量的地位与类等同,要高于普通的成员函数  
  
int main()  
{  
    Cstudent stud1(85, 189.35);  
    stud1.master_num = 1; // 也可以用对象调用  
    Cstudent::master_num = 2; // 由于同级,因此可用类名(作用于限定符)调用  
}

​​​​​​​  

用类的静态成员函数初始化静态成员变量

#include <iostream>  
using namespace std;  
  
class Cstudent  
{  
private:  
    int mark;  
    float height;  
    static int master_num;  
public:  
    Cstudent(int Dmark, float Dheight) :mark(Dmark), height(Dheight){} // 不可用于初始化静态成员变量  
    static void init(int master); // 由于级别不同,因此在静态成员函数中不可以使用类的成员变量  
    static void out();  
};  
  
int Cstudent::master_num = 0; // 必须在类外初始化类的静态成员变量,因为静态成员变量的地位与类等同,要高于普通的成员函数  
void Cstudent::init(int master) // 类静态变量的专属操作函数——静态成员函数  
{  
    master_num = master;  
}  
void Cstudent::out()  
{  
    cout << master_num << endl;  
}  
  
  
int main()  
{  
    Cstudent stud1(85, 189.35);  
    stud1.init(1); // 也可以用对象调用  
    Cstudent::init(2); // 由于同级,因此可用类名(作用于限定符)调用  
    Cstudent::out(); // 用作用域类名调用静态成员函数更凸显出静态成员与类的等同地位  
}  

 

静态成员为什么声明必须在类内,定义必须在类外?

静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“对象(实例)级别”的。类级别的成员,先于该类任何对象的存在而存在,它被该类所有的对象共享。

变量的声明并不会为其分配内存,定义时才分配内存。既然它相当于一个共有变量,你把这些静态成员的定义放在类体内部,当我们每定义一个对象,就定义一次静态成员,那不是犯了“重复定义的错误”了吗!重复定义会导致对一个变量的地址反复的分配空间,那肯定会报错的呀!那么很合理的解决办法,就是事先在类的外部把它定义好,然后再供所有的对象共享。

为什么静态成员变量的处理必须要用静态成员函数?

我在之前说了,静态成员是类级别的,那当然要门当户对了,而且他们是所有同类类型对象所共有的,在静态成员函数中,如果出现普通成员函数this指针指向何方?这个就乱套了。因此静态成员函数是静态成员变量的专属处理函数,反过来,静态成员变量也是静态成员函数的专属操作对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥肥胖胖是太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值