c++之静态函数和静态方法

 1 对象与对象之间要共享数据,则需要使用静态成员或静态方法。

 2 在类中声明静态成员变量,即使不实例化对象,也可以我静态成员变量分配空间。(因为静态成员变量在对象创建之前就已经被分配了内存空间)

 3  静态成员虽在类中,但它并不是随对象的建立而分配内存空间的,也不是随对象的撤销而释放(一般的成员在对象建立时会分配空间,在对象撤销时会释放)。静态成员变量是在程序编译时分配空间,而在程序结束时释放空间。

 4 初始化静态成员变量要在类的外面进行。int player::playerNumber = 0; 初始化的格式如下:

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

 5 可以通过类名对静态成员变量进行引用,也可以通过对象名对静态成员变量进行引用。


 6 不能用参数初始化表对静态成员变量进行初始化。


  代码示例:以下代码是两个小人相互攻击的示例


#include<iostream>
#include<string>
using namespace std;
class player {
	string playerName;  //玩家姓名
	int attack; //攻击力
	int defense;  //防御力
	int health = 100;  //生命值 
	int maxHealth = 100; //最大生命值
public:
	static int playerNumber;
	//构造函数 总数+1
	player(int attackParam, int defenseParam, string nameParam) {
		attack = attackParam;
		defense = defenseParam;
		playerName = nameParam;
		++playerNumber;
	}
	//析构 总数减1
	~player() {
		--playerNumber;
	}
	//获取攻击力
	int getAttack() {
		return attack;
	}
	//设置攻击力
	void setAttack(int attackParam) {
		attack = attackParam;
	}
	//获取防御力
	int getDefense() {
		return defense;
	}
	//设置防御力
	void setDefense(int defenseParam) {
		defense = defenseParam;
	}
	//改变生命值
	void changeHealth(int healthParam) {
		health += healthParam;
		if (health > maxHealth)
		{
			health = maxHealth;
		}
		else if (health <= 0)
		{
			health = 0;
			cout << "Player " << playerName << "  is Dead ! " << endl;
			delete this;
		}
	}
	//显示属性
	void displayProperty() {
		cout << "名字:" << playerName << endl;
		cout << "攻击力:" << attack << endl;
		cout << "防御力:" << defense << endl;
		cout << "生命值:" << health << endl;
	}
	void attackPlayer(player*  otherPlayer) {
		otherPlayer->changeHealth(-this->attack);
	}
	static int displayNumber() {
		cout << playerNumber << endl;
		return playerNumber;
	}
};
int player::playerNumber = 0;

int main() {
	player* player01 = new player(50, 50, "GSL");
	player* player02 = new player(70, 60, "LJL");
	player01->displayProperty();
	player02->displayProperty();

	if (player01)
	{
		player01->attackPlayer(player02);
	}
	if (player02)
	{
		player02->attackPlayer(player01);
	}
	cout << player::playerNumber << endl;
	if (player01)
	{
		player01->attackPlayer(player02);
	}
	if (player02)
	{
		player02->attackPlayer(player01);
	}
	cout << player::playerNumber << endl;

	system("pause");
	return 9696969;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值