目录

一.关于静态成员

二.静态数据成员和普通数据成员的共同点

三.为什么要使用静态数据成员

四.关于静态数据成员的初始化

五. 静态成员的访问方式

六.静态成员函数

1.与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能够处理静态数据成员

2.静态成员函数只能访问static成员,包括数据成员和成员函数

3.非static成员函数既可以访问static数据成员,也可以访问非static数据成员。static成员函数只能访问satic成员

4.静态成员函数不与任何对象绑定在一起,不包含this指针


一.关于静态成员

1.静态成员的声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名 >,非静态成员则不能。
      2. static成员变量属于类(被存放在数据段中),不属于某个具体的对象(具体对象的内存是分配在堆中的),即使创建多个对象,也只为该变量分配一次内存,所有对象使用的都是这份内存中的数据。
     3.若它为public类型,当某个对象修改了它,也会影响到其他对象,所有对象都是“同甘共苦的”

二.静态数据成员和普通数据成员的共同点

静态数据成员和普通数据成员一样遵从public,protected,private访问规则;

三.为什么要使用静态数据成员

1.每个对象都有自己都有的数据成员
  2.不同对象如何共享数据?
    全局变量:谁都可以访问,不安全
    静态数据成员:可以实现数据共享,该类的所有对象都共享这块静态存储空间它不属于某一个对象,它与整个程序的生命周期相同,即使某个对象消亡了,静态数据成员还存在,没有改变

四.关于静态数据成员的初始化

在类内定义,类外声明
   声明的格式 <数据类型><类名>::静态数据成员 = <值>
   静态数据成员不能直接初始化

例如,错误的
   static int i=5;

//正确代码举例
#include<iostream>
using namespace std;
class A
{public:static int i;
};
int A::i=5;//::表示i是属于A这个类的
int main()
{A a;cout<<A::i<<endl;//通过类名加域作用符直接访问 cout<<a.i<<endl;//通过对象访问 return 0; } 
#include <iostream>
using namespace std;
class A
{
public: static int i;
};
int A::i=9;
int main(){A a,b;cout<<a.i<<endl;cout<<b.i<<endl;cout<<"----------"<<endl;b.i=8;cout<<a.i<<endl;//通过这两行的输出表明a,b两个对象共享内存空间 cout<<b.i<<endl;return 0;
}

五. 静态成员的访问方式

1.通过作用域运算符::直接访问静态成员 类名::静态成员 
2.通过对象.静态成员
3.通过指针->静态成员

//访问静态数据成员
#include<iostream>
using namespace std;
class A
{public:static int i;
};
int A::i=5;//::表示i是属于A这个类的
int main()
{A a;cout<<A::i<<endl;//通过类名加域作用符直接访问 cout<<a.i<<endl;//通过对象访问 A * a1=&a;cout<<a1->i; //通过对象指针访问数据成员 return 0; } 
//访问静态成员函数
#include <iostream>
using namespace std;
class Box{public:static int c;int a,b;Box(int x,int y){a=x;b=y;}static void fun(){cout<<c<<endl;cout<<"static fun----"<<endl;   }
};
int Box::c=8;
int main(){Box box(2,3);Box::fun();//使用作用域运算符直接访问静态成员 box.fun();//通过对象.引用名 Box * box2=&box; box2->fun(); //通过类Box对象的指针 return 0;
}

六.静态成员函数

1.与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能够处理静态数据成员

#include<iostream>
using namespace std;
class Box
{public:static void fun(){cout<<"static---"<<endl;}
};
int main()
{Box box1;box1.fun();Box::fun();return 0;
}

2.静态成员函数只能访问static成员,包括数据成员和成员函数

#include <iostream>
using namespace std;
class Box{public:static int c;int a,b;Box(int x,int y){a=x;b=y;}static void fun(){cout<<c<<endl;cout<<"static fun----"<<endl;   }
};
int Box::c=8;
int main(){Box box(2,3);box.fun();Box::fun();return 0;
}

错误举例:

class Box{public:static int c;int a,b;Box(int x,int y){a=x;b=y;}static void fun(){cout<<a<<endl;cout<<"static fun----"<<endl;    }
};

3.非static成员函数既可以访问static数据成员,也可以访问非static数据成员。static成员函数只能访问satic成员

#include <iostream>
using namespace std;
class Box{public:static int c;int a,b;Box(int x,int y){a=x;b=y;}void fun(){cout<<a<<" "<<c<<endl;cout<<"static fun----"<<endl;    }
};
int Box::c=8;
int main(){Box box(2,3); box.fun();//通过对象.引用名 return 0;
} 

4.静态成员函数不与任何对象绑定在一起,不包含this指针

静态数据成员和静态成员函数(static)相关推荐

  1. 静态数据成员与静态成员函数

    3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握静态数据成员和静态成员函数的用法 要求设计一个点类 ...

  2. 3-6 静态数据成员与静态成员函数

    3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 通过本题 ...

  3. C++学习(五) 静态数据成员和静态成员函数

    文章目录 1.静态成员: 1.1.说明 1.2.格式 2.静态成员函数 2.1.说明 2.2.格式 1.静态成员: 1.1.说明 静态成员包括静态数据和静态成员函数. (1).静态数据成员的定义与普通 ...

  4. 类的静态数据成员和静态成员函数

    一.什么是类的静态成员 静态成员变量和全局变量都存储在全局/静态区,它们都是在程序编译时创建,直到编译结束才被收回.所以全局变量和静态成员变量的功能差不多,只是创建的方式不同,类的静态成员创建在类中, ...

  5. C++类的静态数据成员和静态成员函数

    目录 公有属性 静态数据成员 静态成员函数 公有属性 一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个对象的这个数据成员设定相同的值,如果改变类对象相 ...

  6. [C++] 类的静态成员 (静态数据成员 和 静态成员函数)

    目录 一.声明静态成员: 二.定义静态成员: 三.使用类的静态成员: 四.静态成员类内初始化: 五.静态成员与普通成员的区别: 六.案例代码: 类内的静态成员包括: 静态数据成员 和 静态成员函数. ...

  7. 静态数据成员和静态成员函数

    转载自:https://blog.csdn.net/computer_liuyun/article/details/29235111 c++中的static静态数据成员和静态成员函数应该是让大家比较头 ...

  8. 【C++之静态数据成员和静态成员函数】计算商品总销售款和平均售价

    题目要求 商店销售某一商品,商店每天公布统一的折扣(discount).同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购 10 件以上者,还可以享受 9.8 折优惠.现已知当天 ...

  9. c++之静态数据成员与静态成员函数

    什么是静态数据成员? 数据成员我们之前学过,是对象的属性. 同一个类,不同的对象,可能拥有不同的属性 例如一个车行,不同的车有不同的颜色,不同的耗油量...等等属性 但是当我们统计一个公有的数据,用数 ...

最新文章

  1. php合并播放mp4文件_如何将百度的流畅版视频m3u8合并为正确的mp4文件?
  2. [翻译] Fast Image Cache
  3. 译 | 宣布ML.NET 1.2 及模型生成器更新(用于 .NET 的机器学习)
  4. php默认语法,php基本语法
  5. (MATLAB中文乱码)UTF-8转GBK编码
  6. nginx搭建高性能流媒体技术
  7. SpringBoot的自定义配置方法一,通过自定义配置文件
  8. Anaconda下载安装Pytorch遇到的几个问题及解决办法
  9. 手机如何连接远程桌面?
  10. 一键AI绘画-生成自己想要生成的图片(你懂的)。
  11. Poi-tl通过word模板生成文件页眉页脚冲突问题
  12. 论文阅读 [TPAMI-2022] VolterraNet: A Higher Order Convolutional Network With Group Equivariance for Homo
  13. 19深度探秘搜索技术_基于slop参数实现近似匹配以及原理剖析和相关实验
  14. 关于十六进制发送和显示(VS上位机和下位机)
  15. iphoneX、iPhone12尺寸
  16. HDFS启动报错Expected to be able to read up until at least txid but unable to find any edit logs
  17. dsp版win10和普通版区别_Windows10各个版本有什么不同,如何选择适合自己的Win10系统...
  18. win10 opencv-4.1.0 环境配置
  19. Python图像识别-Opencv01
  20. Java笨狗groovy学习笔记—Regular Expressions

热门文章

  1. Android Studio 设置图标LOGO,APP下载到手机以后图标无变化
  2. ubuntu 20.04 安装有道词典
  3. ubuntu 18.0.4 安装 brook client
  4. 行车记录仪 - 国际化 - 光源频率/电源频率
  5. 2022-2028年全球与中国电动马达控制器行业产销需求与投资预测分析
  6. 【photoshop CEP插件】 OCR文字识别
  7. 计算机应用基础个人教学计划,《计算机应用基础》教学计划
  8. 从前端菜鸟到大神,一篇总结得很好的文章
  9. 如何将EML格式邮件导入notes数据库中
  10. 《大数据+AI在大健康领域中最佳实践前瞻》---- 使用python PyHCUP 处理 hcup 数据集的asc 格式数据