类中的静态成员变量和静态成员函数
static静态成员函数
- 1、static 修饰成员变量
- 2、static修饰静态成员函数
- 引子:
- 静态成员函数:
- 注意:
- 3、const 修饰静态成员
- 静态成员案例
- 案例1:静态成员 统计类 实例化对象的 个数
你想要的,岁月凭什么给你,所有逆袭,都是有备而来,所有光芒,需要时间才能被看到,所有幸运,都是努力埋下的伏笔。所以,你不努力谁也给不了你想要的生活。
成员:成员变量 成员函数
static 修饰成员变量 修饰成员函数
static声明为静态的,称为静态成员。 不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享。
静态成员 属于类 而不是对象。
1、static 修饰成员变量
静态变量,是在编译阶段就分配空间,对象还没有创建时,就已经分配空间。
静态成员变量必须在类中声明,在类外定义。
静态数据成员不属于某个对象,在为对象分配空间中不包括静态成员所占空间。
class Data
{public:int num;//普通成员变量static int data;//静态成员变量(类内声明)
};
//定义的时候 不需要加static
int Data::data=100;//类外定义+初始化void test01()
{//data是静态成员变量 是属于类 可以通过类名称::直接访问cout<<Data::data<<endl;//100//赋值Data::data = 200;cout<<Data::data<<endl;//200//data静态变量 是所有对象 共享的 可以通过对象名访问Data ob1;ob1.data = 300;cout<<Data::data<<endl;//300Data ob2;cout<<ob2.data<<endl;//300//普通成员变量 属于对象的 只能通过对象名访问ob1.num = 100;cout<<"ob2.num = "<<ob2.num<<endl;//随机值//cout<<Data::num<<endl;//普通成员变量不能通过类名称访问
}
2、static修饰静态成员函数
引子:
class Data
{private:int num;//普通成员变量static int data;//静态成员变量(类内声明)
public://普通成员函数 依赖于 对象的 必须对象调用int getData(void){return data;}
};//定义的时候 不需要加static
int Data::data=100;//类外定义+初始化void test01()
{//cout<<Data::data<<endl;//err 静态data是私有的 类外不能直接访问//cout<< Data::getData()<<endl;//err getData() 必须对象调用Data ob;cout<<ob.getData()<<endl;//存在问题:data静态的 在创建对象之前 就已经存在//如果类没有实例化对象 难道 就不能使用data了吗? //解决上述问题 就要用到静态成员函数
}
静态成员函数:
class Data
{private:int num;//普通成员变量static int data;//静态成员变量(类内声明)
public://普通成员函数 依赖于 对象的 必须对象调用int getData(void){return data;}//静态成员函数 属于类 而不属于对象static int getDataStatic(void){return data;}
};//定义的时候 不需要加static
int Data::data=100;//类外定义+初始化void test01()
{//cout<<Data::data<<endl;//err 静态data是私有的 类外不能直接访问//cout<< Data::getData()<<endl;//err getData() 必须对象调用Data ob;cout<<ob.getData()<<endl;//存在问题:data静态的 在创建对象之前 就已经存在//如果类没有实例化对象 难道 就不能使用data了吗?//解决上述问题 就要用到静态成员函数//1、静态成员函数 属于类 就可以通过类名称直接访问cout<<Data::getDataStatic()<<endl;//2、也可以通过对象名访问(对象共享静态成员函数)cout<<ob.getDataStatic()<<endl;
}
注意:
1、静态成员函数的目的 操作静态成员数据。
2、静态成员函数 不能访问 非静态成员数据。(静态成员函数内部没有this指针)
3、普通成员函数 可以操作 静态成员数据 非静态成员数据。
4、静态成员变量 和 静态成员函数 都有权限之分。
3、const 修饰静态成员
如果一个类的成员,既要实现共享,又要实现不可改变,那就用 static const 修饰
class Data
{public:const static int data;//静态成员变量(类内声明)
public://静态成员函数 属于类 而不属于对象static int getDataStatic(void){//num = 200;//err 静态成员函数 不能访问普通成员变量return data;}
};//定义的时候 不需要加static
const int Data::data=100;//类外定义+初始化void test02()
{//访问cout<<Data::data<<endl;//赋值//Data::data = 200;//err data静态成员只读cout<<Data::data<<endl;
}
静态成员案例
案例1:静态成员 统计类 实例化对象的 个数
#include <iostream>using namespace std;
class Data
{public:Data(){cout<<"无参构造"<<endl;count++;}Data(const Data &ob){cout<<"拷贝构造函数"<<endl;count++;}~Data(){count--;cout<<"析构函数"<<endl;}static int count;
};int Data::count = 0;int main(int argc, char *argv[])
{Data ob1;Data ob2;{Data ob3;Data ob4;cout<<"对象的个数:"<<Data::count<<endl;}cout<<"对象的个数:"<<Data::count<<endl;return 0;
}
运行结果:
类中的静态成员变量和静态成员函数相关推荐
- c++中静态成员变量和静态成员函数
静态成员变量 在一个类中,若将一个成员变量声明为static,这种成员成为静态成员变量,与一般的数据成员不同,无论建立了多少个对象,都只想有一个静态数据的拷贝,静态成员变量,属于某个类,所有对象共享 ...
- C++中静态成员变量与静态成员函数
Hello,我是你们的好朋友一一,一一这次呢想跟大家分享的知识点是静态成员变量和静态成员函数. So what is the 静态成员??? 1.静态成员: 在类定义中,它的成员(包括成员变量和成员函 ...
- C++:类的静态成员变量及静态成员函数
写在前面: 对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员和静态方法 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为 ...
- C++静态成员变量和成员函数
静态成员变量和成员函数 简介 sizeof不将静态成员变量的大小计算在内 可以通过类名来访问静态成员 静态成员函数不能访问类的非静态成员 简介 static加在局部变量的前面改变其存储类型使之成为静态 ...
- C++之类的静态成员变量和静态成员函数
static静态成员函数 在类中.static 除了声明静态成员变量,还能够声明静态成员函数. 普通成员函数能够訪问全部成员变量.而静态成员函数仅仅能訪问静态成员变量. 我们知道.当调用一个对象的成员 ...
- C++学习10 static静态成员变量和静态成员函数
一般情况下,如果有N个同类的对象,那么每一个对象都分别有自己的成员变量,不同对象的成员变量各自有值,互不相干.但是有时我们希望有某一个或几个成员变量为所有对象共有,这样可以实现数据共享. 可以使用全局 ...
- C++基础07-类之静态成员变量和成员函数
总结: 1.静态数据成员和静态成员函数属于整个类而不是某个对象 即使没有定义对象,静态成员也是存在的 2.static 成员类外存储,求类大小,并不包含在内. (因为存储在全局区,而类一般存储在栈区) ...
- C++面试题-面向对象-静态成员变量以及静态成员函数
C++面试题-面向对象-静态成员变量以及静态成员函数 问:在类中,静态数据成员和普通数据成员有何区别? 答: 普通数据成员属于类的对象,对象被创建后,普通数据成员才会分配内存.静态数据成员属于整个类, ...
- C++静态成员变量与静态成员函数
类的静态成员有两种:静态成员变量和静态成员函数,语法是在普通成员变量和成员函数前加static关键字. 0.定义 class CRect{ public:void show();//普通成员函数sta ...
最新文章
- SqlCommand.Parameters的使用
- JAVA共有几种窗体布局方式_在Java GUI程序开发中常见的三种布局管理器是什么
- AngularJS基于MVC的复杂操作案例
- [bzoj1036]树的统计
- Python爬取B站5000条视频,揭秘为何千万人看「哪吒」流泪
- CDP客户数据管理平台体系化搭建
- 试解释如下两个概念:CLR和CTS
- nginx负载均衡核心模块(upstream和proxy模块)及常用参数介绍
- Oracle数据库连接报错
- 开源:通用的日志分析工具(LogViewer)
- tc7102路由器虚拟服务器,电信华为tc7102路由器怎么设置
- ✨❤️CSDN标题党❤️,创意无极限,那不直接全网站都花的飞起?
- [CodeChef FEB15]Payton numbers(CUSTPRIM)解题报告
- 华为云数据库VS自建数据库,上“云”不是智商税
- Kickstarter | 海外项目汇总
- Revit二次开发小技巧(十二)创建带洞口的墙
- 【mysql】--explain命令解析
- Linux入门到精通
- java IO流之一 IO流介绍
- springboot整合webSocket(看完即入门)
热门文章
- 如何用VBA快速批量提取多个工作表名称?
- [USACO07FEB]Lilypad Pond
- Lambda从入门到精通(一篇搞懂)
- wps手机版ppt动画效果_wps ppt中怎么插入进入的动画效果?
- 计算机原理-浮点数存储
- Spring AOP 切面记录操作日志
- Android开发人口流动管理,Android轻松搞定流动布局
- 计算机配置好坏怎么看,怎么看电脑配置,电脑配置好坏信息一目了然-腾讯电脑管家...
- opnet对服务器的性能分析,一种Web服务器集群的动态反馈算法
- VLAN的划分以及三层交换机理论,OMG,太详细了吧,看它!