static成员变量简单使用

static成员变量最最最需要注意到一点,就是他的赋初值是在类的定义外。为什么?static变量属于整个类,而不是某个对象,所有对象共用。如果在类内,每次创建对象,都会将这个量赋值的。

那么,我们在什么地方进行赋值呢?在mian函数中?还是在哪里呢?

如果按照正确的思维,确实应该在mian函数中赋初始值。但是呢,在大的项目中,大家都是分工的,我编写好的类,别人可以直接拿来用。如果,你使用别人的类还被告知要给里面某个量赋值,这也太不符合高内聚,低耦合了吧。不可取。

不能放在类内,也不能放在main函数中,难道放在头文件对应的.cpp文件中。如果可以的话,这样是最好的,但是有个问题,写在这里面能执行吗?以前,我的认为是只有main函数可以执行,这些定义的头文件以及对应的.cpp文件都是类似于库函数这类被调用才会执行的。

那么,到底是怎样的呢?答案是放在头文件对应的.cpp文件中的。根据结果我们来分析,编译器可能在编译.cpp文件时,碰到static就会直接在全局变量区分配空间并且初始化吧。

来一个例子:

要求:定义一个Employee类,它包含雇员的姓名和唯一的雇员证号。为这个类定义默认构造函数,以及接受一个表示雇员姓名的string的构造函数。每个构造函数应该通过递增一个static数据成员来生成一个唯一的证号。

程序如下:

main函数:

#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
	Employee a;
	a.display();
	Employee b("xiaoming");
	b.display();
	Employee c("zhangsan");
	c.display();
}


头文件:

#ifndef PCH_H
#define PCH_H
#include<string>
#include<iostream>
using namespace std;
class Employee {
public:
	Employee();
	Employee(string a);
	void display() const;
private:
	string name;
	int number;
	//静态成员不属于类,要在类外初始化,虽然是private但是不妨碍
	static int produce_number;
};

#endif //PCH_H

头文件对应的.cpp文件:

#include "pch.h"
Employee::Employee(string a):name(a) {
	number = ++produce_number;
}
Employee::Employee() : name("") {
	number = ++produce_number;
}
int Employee::produce_number = 0;
void Employee::display() const{
	cout << name << " " << number << endl;
}

/*以前对静态成员不是太了解哈,也没使用过,现在来总结一下,因为静态成员不属于某个对象,属于类,所以呢,我们不能在类中对他进行赋初始值,不然每次创建对象
都会造成这个值内容的改变,因此,赋初始值应该放在类的外面,外面的哪里呢?写在static里面好像不太行,我这个类写好了准备给别人用的,然后
还要告诉被人,哎,我这个类要想使用必须有个条件,你要在main中对其进行赋初始值一次。想想就不太可能哈。
这样的话,放在哪里呢?可以放在头文件对应的.cpp文件里面,但是有个问题,放在这里面的内容会被执行吗?写在这里面也没有用啊*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值