C++类的static(静态)成员

一、静态数据成员

1.存储空间的分配

定义类时分配空间,一般的数据成员依附于对象,定义类时不为其分配存储空间,只有定义对象时才分配存储空间。而静态数据成员不依附于任何特定对象,为所有对象所共有,不是定义对象时才分配存储空间,而是定义类时就为静态数据成员分配存储空间,供各对象所共享使用。

2.在程序运行时始终存在

对于静态数据成员,定义类时分配存储空间,程序结束时才收回分配的存储空间。

3.只能在类外进行初始化

对静态数据成员的初始化,只能在类外进行,赋值语句的语法如下:

类型吗 类名:: 静态数据成员名=初值;

例如:

int A::a=0;//将A类的静态数据成员赋值为0

如果没有为静态成员赋值,系统默认初值是0.

4.可以通过类名访问

一般数据成员只能通过对象名或者指针方式访问,而静态数据成员既可以通过对象名或指针的方式访问,也可以通过类名访问:
语法如下:

类名::对象名;

如访问类A中的静态成员a:

cout<<A::a<<endl;

二、静态成员函数

1.声明格式

static 返回类型 函数名(形式参数表);

2.访问方式

和静态数据成员一样,静态成员函数既可以通过对象名调用也可以通过类名调用。

三、示例

//创建教职工类
class Employee
{
public:
    Employee(int num = 0, string name = "", float salary = 0);//带默认值的构造函数
    void setValue(int num = 0, string name = "", float salary = 0);//赋值函数
    void total();//总数的求法
    static void average();//求平均工资
private:
    int empNum;     //职工编号
    string empName; //职工姓名
    float empSalary; //职工工资
public:
    static int empSumEmp;//职工总数
    static float empSumSal;//工资总额
    static float empAveSal;//平均工资

};
int Employee::empSumEmp=0;//职工总数在类外初始化
float Employee::empSumSal=0;//工资总额在类外初始化
float Employee::empAveSal=0;//平均工资在类外初始化
Employee::Employee(int num, string name, float salary)
{
    empNum = num;
    empName = name;
    empSalary = salary;
}
void Employee::setValue(int num , string name, float salary)//赋值函数的定义
{
    empNum = num;
    empName = name;
    empSalary = salary;

}
void Employee::total()//总数的求法
{
    empSumSal+= empSalary;
    empSumEmp++;
}
void Employee::average()//求平均工资
{
    empAveSal = empSumSal / empSumEmp;
}

主函数中有如下代码:

Employee emp[5];//创建对象数组
    for (int i = 0; i < 5; i++)
    {
        int num;
        string name;
        float salary;
        cout << "输入职工编号" << endl;
        cin >> num;
        cout << "输入职工姓名" << endl;
        cin >> name;
        cout << "输入职工工资" << endl;
        cin >> salary;
        emp[i].setValue(num, name, salary);//位每个对象赋值
    }
    for (int i = 0; i < 5; i++)
    {
        emp[i].total();//求总和
    }
    Employee::average();//求平均工资
    cout << "职工总数=" << Employee::empSumEmp << endl;//类作用域访问静态成员
    cout << "工资总额=" << Employee::empSumSal << endl;
    cout << "平均工资=" << Employee::empAveSal << endl;

运行截图如下:
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

随机的未知

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

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

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

打赏作者

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

抵扣说明:

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

余额充值