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

来源:互联网 发布:e站app 显示网络错误 编辑:程序博客网 时间:2024/06/05 07:05

 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;//构造函数 总数+1player(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;}


0 0
原创粉丝点击