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

2017年12月2日20:08:50C++评论233阅读模式

一、静态数据成员

1.存储空间的分配

定义类时分配空间,一般的数据成员依附于对象,定义类时不为其分配存储空间,只有定义对象时才分配存储空间。而静态数据成员不依附于任何特定对象,为所有对象所共有,不是定义对象时才分配存储空间,而是定义类时就为静态数据成员分配存储空间,供各对象所共享使用。文章源自随机的未知-https://sjdwz.com/11098.html

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

对于静态数据成员,定义类时分配存储空间,程序结束时才收回分配的存储空间。文章源自随机的未知-https://sjdwz.com/11098.html

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

对静态数据成员的初始化,只能在类外进行,赋值语句的语法如下:文章源自随机的未知-https://sjdwz.com/11098.html

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

例如:文章源自随机的未知-https://sjdwz.com/11098.html

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

如果没有为静态成员赋值,系统默认初值是0.文章源自随机的未知-https://sjdwz.com/11098.html

4.可以通过类名访问

一般数据成员只能通过对象名或者指针方式访问,而静态数据成员既可以通过对象名或指针的方式访问,也可以通过类名访问:
语法如下:文章源自随机的未知-https://sjdwz.com/11098.html

类名::对象名;

如访问类A中的静态成员a:文章源自随机的未知-https://sjdwz.com/11098.html

cout<<A::a<<endl;

二、静态成员函数

1.声明格式

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

2.访问方式

和静态数据成员一样,静态成员函数既可以通过对象名调用也可以通过类名调用。文章源自随机的未知-https://sjdwz.com/11098.html

三、示例

//创建教职工类
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;
}


主函数中有如下代码:文章源自随机的未知-https://sjdwz.com/11098.html

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;

运行截图如下:
C++类的static(静态)成员
C++类的static(静态)成员文章源自随机的未知-https://sjdwz.com/11098.html

本文在未建站时所写,排版会有些问题,大家可以去访问原文链接查看原文
原文链接:https://blog.csdn.net/qq_41243472/article/details/78692785文章源自随机的未知-https://sjdwz.com/11098.html

文章源自随机的未知-https://sjdwz.com/11098.html
欢迎关注本站微信公众号:随机的未知 如果喜欢本文,欢迎点赞,收藏,转发,打赏。
C++最后更新:2022-2-23
  • 本文由 发表于 2017年12月2日20:08:50
  • 转载请注明:来源:随机的未知 本文链接https://sjdwz.com/11098.html
教程

详解MySQL索引

索引介绍 索引是帮助MySQL高效获取数据的数据结构。在数据之外,数据库系统还维护着一个用来查找数据的数据结构,这些数据结构指向着特定的数据,可以实现高级的查找算法。 本文以MySQL常用的B+Tre...
java

详解java接口interface

引言 接口这个词在生活中我们并不陌生。 在中国大陆,我们可以将自己的家用电器的插头插到符合它插口的插座上; 我们在戴尔,惠普,联想,苹果等品牌电脑之间传输数据时,可以使用U盘进行传输。 插座的普适性是...
java

Java中的抽象类和抽象方法

引言 实例图片 如上图,二维图形类有三个子类,分别是正方形类,三角形类,圆形类; 我们都知道要求正方形的面积,直接使用面积公式边长的平方即可,同理三角形的是底乘高除以2,圆的面积是**乘以半径的平方。...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定