C++学习(五) 静态数据成员和静态成员函数
文章目录
- 1、静态成员:
- 1.1、说明
- 1.2、格式
- 2、静态成员函数
- 2.1、说明
- 2.2、格式
1、静态成员:
1.1、说明
静态成员包括静态数据和静态成员函数。
(1)、静态数据成员的定义与普通数据成员相似,但要在前面加static关键字。
(2)、静态变量一定要进行初始化:一般初始化位置在main函数之前、类声明之后。
1.2、格式
初始化格式:
数据类型 类名::静态数据成员名=初始值;
示例如下:
#include<iostream>
using namespace std;
class score{public:static int number;//静态数据成员...
};
...
int score::number=0; //对静态数据成员初始化
(3)、静态数据成员属于类,因此可以使用”类名::”访问静态的数据成员。
访问格式:
类名::静态数据成员名
(4)、静态数据成员与静态变量一样,是在编译时创建并初始化。在该类的任何对象被建立之前就存在。
公有的静态数据成员可以在对象定义之前被访问。
对象定义后,公有的静态数据成员也可以通过对象进行访问。
用对象访问静态数据成员的格式如下:
对象名.静态数据成员名;
对象指针->静态数据成员名;
示例如下:
#include<iostream>
using namespace std;
class score{public:static int number; //定义静态成员
};
int score::number=0; //对静态数据成员初始化
int main()
{score::number=10; //公有静态数据成员可以在对象定义之前被访问score ob,*p;p=&ob;cout<<"ob.number:"<<ob.number<<endl; //通过对象访问公有静态数据成员numbercout<<"score::number:"<<score::number<<endl; //通过类名访问公有静态数据成员numbercout<<"p->number"<<p->number<<endl; //通过对象指针公有静态数据成员numberreturn 0;
}
运行结果如下:
ob.number:10
score::number:10
p->number10
(5)、在类外,私有的静态数据成员不能被直接访问,必须通过公有的成员函数访问。
(6)、C++支持静态数据成员的一个主要原因是可以不必使用全局变量。
2、静态成员函数
2.1、说明
静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,而静态成员函数没有this指针。
一般而言,静态成员函数不访问类中的非静态成员。若确实需要访问非静态数据成员,静态成员函数只能通过对象名(或对象指针、对象引用)访问该对象的非静态成员。
2.2、格式
定义静态成员函数的格式如下:
static 返回类型 静态成员函数名();
调用公有静态成员函数的一般格式为:
类名::静态成员函数名()
对象.静态成员函数名()
对象指针->静态成员函数名()
示例代码如下:
#include <iostream>
using namespace std;
class score{public: //公有score(int a,int b); //公有成员函数 static void showscore(); //静态成员函数private: //私有 int mid_exam; //私有成员函数 int fin_exam; //私有成员函数static int count; //统计数量 static double sum; //统计累加值 static double ave; //统计平均值
};
score::score(int a,int b)
{count++; //累加数量 mid_exam=a;fin_exam=b;sum+=fin_exam; //累加值ave=sum/count; //平均值} void score::showscore(){cout<<"人数"<<count<<endl; cout<<"累加分数"<<sum<<endl;cout<<"平均成绩"<<ave<<endl; }int score::count=0; //初始化 double score::sum=0.0;double score::ave=0.0;int main(){score rec[3]={ //定义对象数组 score(70,71),score(80,81),score(90,91)};rec[3].showscore(); //用对象名访问 score::showscore(); //用类名访问 return 0;}
运行结果如下:
人数3
累加分数243
平均成绩81
人数3
累加分数243
平均成绩81
(1)、一般情况下,静态函数成员主要用来访问静态数据成员。当它与静态数据成员一起使用时,达到了对同一个类中对象之间共享数据的目的。
(2)、私有静态成员函数不能被类外部的函数和对象访问。
(3)、可以用静态成员函数在建立任何一个对象之前调用静态成员函数,以处理静态数据成员。
(4)、静态成员函数是类的一部分,而不是对象的一部分。
如果要在类外调用公有的静态成员函数,使用如下格式较好:
类名::静态成员函数名()
C++学习(五) 静态数据成员和静态成员函数相关推荐
- 类的静态数据成员和静态成员函数
一.什么是类的静态成员 静态成员变量和全局变量都存储在全局/静态区,它们都是在程序编译时创建,直到编译结束才被收回.所以全局变量和静态成员变量的功能差不多,只是创建的方式不同,类的静态成员创建在类中, ...
- [C++] 类的静态成员 (静态数据成员 和 静态成员函数)
目录 一.声明静态成员: 二.定义静态成员: 三.使用类的静态成员: 四.静态成员类内初始化: 五.静态成员与普通成员的区别: 六.案例代码: 类内的静态成员包括: 静态数据成员 和 静态成员函数. ...
- 静态数据成员和静态成员函数
转载自:https://blog.csdn.net/computer_liuyun/article/details/29235111 c++中的static静态数据成员和静态成员函数应该是让大家比较头 ...
- 静态数据成员和静态成员函数(static)
目录 一.关于静态成员 二.静态数据成员和普通数据成员的共同点 三.为什么要使用静态数据成员 四.关于静态数据成员的初始化 五. 静态成员的访问方式 六.静态成员函数 1.与静态数据成员不同,静态成员 ...
- 静态数据成员与静态成员函数
3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握静态数据成员和静态成员函数的用法 要求设计一个点类 ...
- 3-6 静态数据成员与静态成员函数
3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 通过本题 ...
- C++类的静态数据成员和静态成员函数
目录 公有属性 静态数据成员 静态成员函数 公有属性 一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个对象的这个数据成员设定相同的值,如果改变类对象相 ...
- 【C++之静态数据成员和静态成员函数】计算商品总销售款和平均售价
题目要求 商店销售某一商品,商店每天公布统一的折扣(discount).同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购 10 件以上者,还可以享受 9.8 折优惠.现已知当天 ...
- c++之静态数据成员与静态成员函数
什么是静态数据成员? 数据成员我们之前学过,是对象的属性. 同一个类,不同的对象,可能拥有不同的属性 例如一个车行,不同的车有不同的颜色,不同的耗油量...等等属性 但是当我们统计一个公有的数据,用数 ...
最新文章
- JavaScript时间日期格式化
- jquery实现后台系统左侧菜单的点击展开/收缩二级菜单效果
- linux的mysql主主_Linux下指定mysql数据库数据配置主主同步的实例
- linux mount文件夹
- 【flutter】学习之路(一)环境的搭建
- AngularJs $anchorScroll、$controller、$document
- dev分支和master是什么_天天用Git,分支开发你怎么弄的?
- 史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(三)
- html字符串替换src,替换html字符串中img标签src的值.
- java 日期_Java中的日期操作
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
- 请说明指令周期、机器周期、时钟周期之间的关系。
- 路由器接口为啥不能配置为任意播地址_计算机三级网络技术(7):路由器配置及使用(下)...
- OpenCV读取RTSP视频流
- Java 8 Strem基本操作
- php 网站地图 在线生成 代码,WordPress免插件生成完整站点地图(sitemap.xml)的php代码...
- DS18B20驱动详解(蓝桥杯单片机)
- Findbugs错误总结
- GNSS-SINEX文件格式简介
- 厄米高斯模式与拉盖尔高斯模式
热门文章
- LabVIEW编程LabVIEW控制NET0816以太网数据采集卡例程与相关资料
- dbd mysql dbi_MySQL的DBI/DBD简明安装手册
- Ant Design Pro
- 记一次el-select远程搜索默认数据回显问题
- 搭建 Mellanox ConnectX-3 EN 10/40 Gbps 网卡 DPDK 运行环境
- Puppeteer之Pyppeteer-Pyppeteer基础用法入门(1)
- jenkins 中无Dingding plugin钉钉插件,及其钉钉发送消息
- 基于R语言的随机森林算法运用
- Python爱好者 socket模块传输文件 -
- C程序设计基础期末考试复习