//对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员或静态方法
//#只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为静态成员变量在对象创建之前就已经被分配了内存空间)
//#静态成员变量虽然在类中,但它并不是随对象的建立而分配空间的,也不是随对象的撤销而释放(一般的成员在对象建立时会分配空间,在对象撤销时会释放).静态成员变量是在程序编译时分配空间,而在程序结束时释放空间.
//#初始化静态成员变量要在类的外面进行.初始化的格式如下:数据类型 类名::静态成员变量名 = 初值;
//#不能用参数初始化表,对静态成员变量进行初始化.
//#即可以通过类名来对静态成员变量进行引用,也可以通过对象名来对静态成员变量进行引用.
//普通成员函数和静态成员函数的区别是:普通成员函数在参数传递时编译器会隐藏地传递一个this指针.通过this指针来确定调用类产生的哪个对象;但是静态成员函数没有this指针,不知道应该访问哪个对象中的数据,所以在程序中不可以用静态成员函数访问类中的普通变量.
#include <iostream>
using namespace std;
class CShop
{
public:
CShop(int size);
void ShowSize();
static void ShowPrice(); //声明静态成员函数用来显示价格
static int ChangePrice(int price); //声明静态成员函数用来更改价格
private:
int m_size; //声明一个私有成员变量
static int m_price; //声明一个私有静态成员变量
};
CShop::CShop(int size)
{
m_size = size;
} void CShop::ShowSize()
{
cout << "商品数量:" << m_size << endl;
}
void CShop::ShowPrice()
{
cout << "商品价格:" << m_price << endl;
}
int CShop::ChangePrice(int price)
{
m_price = price;
return m_price;
}
int CShop::m_price = ; //初始化静态成员变量 int main(int argc, char * argv[])
{
CShop::ShowPrice();
CShop::ChangePrice();
CShop::ShowPrice();
CShop shop(); shop.ShowSize();
shop.ShowPrice(); return ;
}
#include<iostream>
#include<string>
using namespace std;
class player {
string playerName; //玩家姓名
int attack; //攻击力
int defense; //防御力
int health = ; //生命值
int maxHealth = ; //最大生命值
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 <= )
{
health = ;
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 = ;
int main() {
player* player01 = new player(, , "GSL");
player* player02 = new player(, , "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 ;
}

https://blog.csdn.net/ttt301/article/details/52326067

https://blog.csdn.net/longyanbuhui/article/details/71404308

c++ 静态函数的更多相关文章

  1. 使用静态函数impl模式做接口

    使用静态函数impl模式做接口 impl即桥接模式,主要是为了隐藏数据和减少不必要的编译. 普通的impl模式做接口一般是: A类是接口,B类继承A类,是A类的实现,C类,包含A类和B类的头文件,把B ...

  2. 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板

    [源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...

  3. 静态函数(面向过程的static关键字)

    在函数的返回类型前加上static关键字,函数即被定义为静态函数.静态函数与普通函数不同,它只能在声明它的文件中可见,不能被其他文件使用. 静态函数的例子: #include <iostream ...

  4. C语言中使用静态函数的好处

    C语言中使用静态函数的好处: 静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多. ???(对这个不是很理解)其实我觉得上面这种说法是错误的,它的主 ...

  5. java:静态成员变量和静态函数

    静态成员变量 可以使用类名调用,如 class Dog { static int age; } class Test2{ public static void main(String args[]){ ...

  6. c++静态成员与静态函数

    1 静态成员的定义 1 静态变量 c++在类里面进行的仅是引用性声明,不会为之分配内存,要求必须单独对静态数据成员进行定义性的声明.形式为: 类型 类名::静态数据成员名: 此时的定义需要再加关键字s ...

  7. 用CRTP在C++中实现静态函数的多态

    我上一篇博客[C++的静态分发(CRTP)和动态分发(虚函数多态)的比较](http://www.cnblogs.com/fresky/p/3504241.html)介绍了如何用CRTP(Curiou ...

  8. C语言静态函数静态变量

    C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数.而内部对象是指定义在函数内部的函数参数及变量. 外部变量定义在函数之外,因此可以在许多函数中使用.由于C语言不允许在一个函数中定义 ...

  9. 简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

    本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一 ...

  10. Linux c codeblock的使用(四):创建自己的静态函数库

    从我之前的博文当中,大家应该大概了解了linux下的函数库究竟是一个什么样的东西.linux下的函数库其实就像windows中的dll文件,里面包含了程序运行所需要的函数. 其实无论是我们使用linu ...

随机推荐

  1. iOS 网易彩票-4设置模块一

    概述 基本上,每一款APP都有相应的设置模块.怎么设置才能更灵活和通用呢,这也是大家一直思考的.下面说说在网易彩票中,设置模块的设置思想. 基本上有三种方案: static cell(呆板,完全没有动 ...

  2. linux phpize

    phpize是什么 1.phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块. 当php编译完后,在bin下面会有phpize这个脚本文件, 在编译你要添加的扩展模块之前, ...

  3. VueJS 数据驱动和依赖追踪分析

    之前关于 Vue 数据绑定原理的一点分析,最近需要回顾,就顺便发到随笔上了 在之前实现一个自己的Mvvm中,用 setter 来观测model,将界面上所有的 viewModel 绑定到 model ...

  4. 172. Factorial Trailing Zeroes(阶乘中0的个数 数学题)

    Given an integer n, return the number of trailing zeroes in n!. Example 1: Input: 3 Output: 0 Explan ...

  5. python练习-生成一个1到50的大字符串每个数字之间有个空格

    #-*-encoding:UTF-8-*- string=[] for i in range(1,51): string.append(str(i)) print string#打印一下string ...

  6. Linux基础命令---cpio

    cpio 从归档中复制文件,或者复制文件到归档中.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. Cpio命令有三种工作模式: 1)c ...

  7. 20145316许心远《网络对抗》EXP7网络欺诈技术防范

    20145316许心远<网络对抗>EXP7网络欺诈技术防范 实验后回答问题 通常在什么场景下容易受到DNS spoof攻击 公共共享网络里,同一网段可以ping通的网络非常容易被攻击 在日 ...

  8. Java eclipse下 Ant build.xml实例详解 附完整项目源码

    在有eclipse集成环境下ant其实不是很重要,但有些项目需要用到,另外通过eclipse来学习和理解ant是个很好的途径,所以写他demo总结下要点,希望能够帮到大家. 一.本人测试环境eclip ...

  9. 百度地图api通过地址显示地图,白名单

    百度地图api通过地址显示地图,白名单 http://developer.baidu.com/map/jsdemo.htm#i7_1?qq-pf-to=pcqq.c2c---------------- ...

  10. Python之路----递归函数

    1.小练一下 用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=['alex','wupeiqi','yuanhao','nezha'] # def func(item ...