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;
}

运行结果:

类中的静态成员变量和静态成员函数相关推荐

  1. c++中静态成员变量和静态成员函数

    静态成员变量 在一个类中,若将一个成员变量声明为static,这种成员成为静态成员变量,与一般的数据成员不同,无论建立了多少个对象,都只想有一个静态数据的拷贝,静态成员变量,属于某个类,所有对象共享 ...

  2. C++中静态成员变量与静态成员函数

    Hello,我是你们的好朋友一一,一一这次呢想跟大家分享的知识点是静态成员变量和静态成员函数. So what is the 静态成员??? 1.静态成员: 在类定义中,它的成员(包括成员变量和成员函 ...

  3. C++:类的静态成员变量及静态成员函数

    写在前面: 对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员和静态方法 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为 ...

  4. C++静态成员变量和成员函数

    静态成员变量和成员函数 简介 sizeof不将静态成员变量的大小计算在内 可以通过类名来访问静态成员 静态成员函数不能访问类的非静态成员 简介 static加在局部变量的前面改变其存储类型使之成为静态 ...

  5. C++之类的静态成员变量和静态成员函数

    static静态成员函数 在类中.static 除了声明静态成员变量,还能够声明静态成员函数. 普通成员函数能够訪问全部成员变量.而静态成员函数仅仅能訪问静态成员变量. 我们知道.当调用一个对象的成员 ...

  6. C++学习10 static静态成员变量和静态成员函数

    一般情况下,如果有N个同类的对象,那么每一个对象都分别有自己的成员变量,不同对象的成员变量各自有值,互不相干.但是有时我们希望有某一个或几个成员变量为所有对象共有,这样可以实现数据共享. 可以使用全局 ...

  7. C++基础07-类之静态成员变量和成员函数

    总结: 1.静态数据成员和静态成员函数属于整个类而不是某个对象 即使没有定义对象,静态成员也是存在的 2.static 成员类外存储,求类大小,并不包含在内. (因为存储在全局区,而类一般存储在栈区) ...

  8. C++面试题-面向对象-静态成员变量以及静态成员函数

    C++面试题-面向对象-静态成员变量以及静态成员函数 问:在类中,静态数据成员和普通数据成员有何区别? 答: 普通数据成员属于类的对象,对象被创建后,普通数据成员才会分配内存.静态数据成员属于整个类, ...

  9. C++静态成员变量与静态成员函数

    类的静态成员有两种:静态成员变量和静态成员函数,语法是在普通成员变量和成员函数前加static关键字. 0.定义 class CRect{ public:void show();//普通成员函数sta ...

最新文章

  1. SqlCommand.Parameters的使用
  2. JAVA共有几种窗体布局方式_在Java GUI程序开发中常见的三种布局管理器是什么
  3. AngularJS基于MVC的复杂操作案例
  4. [bzoj1036]树的统计
  5. Python爬取B站5000条视频,揭秘为何千万人看「哪吒」流泪
  6. CDP客户数据管理平台体系化搭建
  7. 试解释如下两个概念:CLR和CTS
  8. nginx负载均衡核心模块(upstream和proxy模块)及常用参数介绍
  9. Oracle数据库连接报错
  10. 开源:通用的日志分析工具(LogViewer)
  11. tc7102路由器虚拟服务器,电信华为tc7102路由器怎么设置
  12. ✨❤️CSDN标题党❤️,创意无极限,那不直接全网站都花的飞起?
  13. [CodeChef FEB15]Payton numbers(CUSTPRIM)解题报告
  14. 华为云数据库VS自建数据库,上“云”不是智商税
  15. Kickstarter | 海外项目汇总
  16. Revit二次开发小技巧(十二)创建带洞口的墙
  17. 【mysql】--explain命令解析
  18. Linux入门到精通
  19. java IO流之一 IO流介绍
  20. springboot整合webSocket(看完即入门)

热门文章

  1. 如何用VBA快速批量提取多个工作表名称?
  2. [USACO07FEB]Lilypad Pond
  3. Lambda从入门到精通(一篇搞懂)
  4. wps手机版ppt动画效果_wps ppt中怎么插入进入的动画效果?
  5. 计算机原理-浮点数存储
  6. Spring AOP 切面记录操作日志
  7. Android开发人口流动管理,Android轻松搞定流动布局
  8. 计算机配置好坏怎么看,怎么看电脑配置,电脑配置好坏信息一目了然-腾讯电脑管家...
  9. opnet对服务器的性能分析,一种Web服务器集群的动态反馈算法
  10. VLAN的划分以及三层交换机理论,OMG,太详细了吧,看它!