文章目录

  • 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++学习(五) 静态数据成员和静态成员函数相关推荐

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

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

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

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

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

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

  4. 静态数据成员和静态成员函数(static)

    目录 一.关于静态成员 二.静态数据成员和普通数据成员的共同点 三.为什么要使用静态数据成员 四.关于静态数据成员的初始化 五. 静态成员的访问方式 六.静态成员函数 1.与静态数据成员不同,静态成员 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. JavaScript时间日期格式化
  2. jquery实现后台系统左侧菜单的点击展开/收缩二级菜单效果
  3. linux的mysql主主_Linux下指定mysql数据库数据配置主主同步的实例
  4. linux mount文件夹
  5. 【flutter】学习之路(一)环境的搭建
  6. AngularJs $anchorScroll、$controller、$document
  7. dev分支和master是什么_天天用Git,分支开发你怎么弄的?
  8. 史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(三)
  9. html字符串替换src,替换html字符串中img标签src的值.
  10. java 日期_Java中的日期操作
  11. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
  12. 请说明指令周期、机器周期、时钟周期之间的关系。
  13. 路由器接口为啥不能配置为任意播地址_计算机三级网络技术(7):路由器配置及使用(下)...
  14. OpenCV读取RTSP视频流
  15. Java 8 Strem基本操作
  16. php 网站地图 在线生成 代码,WordPress免插件生成完整站点地图(sitemap.xml)的php代码...
  17. DS18B20驱动详解(蓝桥杯单片机)
  18. Findbugs错误总结
  19. GNSS-SINEX文件格式简介
  20. 厄米高斯模式与拉盖尔高斯模式

热门文章

  1. LabVIEW编程LabVIEW控制NET0816以太网数据采集卡例程与相关资料
  2. dbd mysql dbi_MySQL的DBI/DBD简明安装手册
  3. Ant Design Pro
  4. 记一次el-select远程搜索默认数据回显问题
  5. 搭建 Mellanox ConnectX-3 EN 10/40 Gbps 网卡 DPDK 运行环境
  6. Puppeteer之Pyppeteer-Pyppeteer基础用法入门(1)
  7. jenkins 中无Dingding plugin钉钉插件,及其钉钉发送消息
  8. 基于R语言的随机森林算法运用
  9. Python爱好者 socket模块传输文件 -
  10. C程序设计基础期末考试复习