当前位置: 首页 > news >正文

类的其它特性

一、静态成员函数

       通常,每当说明一个对象时,把该类中的有关成员数据拷贝到该对象中,即同一类的不同对象,其成员数据之间是互相独立的。

class A{ 
      int x,y;
      public:  
     void Setxy(int a, int b)
    {  
        x=a;   
        y=b;
    }
};
A   a1,  a2;
a1.Setxy(1,2);
a2.Setxy(3,4);

在这里插入图片描述
       当我们将类的某一个数据成员的存储类型指定为静态类型时,则由该类所产生的所有对象,其静态成员均共享一个存储空间这个空间是在编译的时候分配的。换而言之,在说明对象时,并不为静态类型的成员分配空间。

       在类定义中,用关键字static修饰的数据成员称为静态数据成员。

class A{ 
    int x,y;  static  int z;
    public:  
     void Setxy(int a, int b)
    {  x=a;   y=b;}
};
A   a1,  a2;

在这里插入图片描述
       有关静态数据成员的使用,说明以下几点
       1、类的静态数据成员是静态分配存储空间的,而其它成员是动态分配存储空间的(全局变量除外)。当类中没有定义静态数据成员时,在程序执行期间遇到说明类的对象时,才为对象的所有成员依次分配存储空间,这种存储空间的分配是动态的;而当类中定义了静态数据成员时,在编译时,就要为类的静态数据成员分配存储空间
       2、必须在文件作用域中,对静态数据成员作一次且只能作一次定义性说明。因为静态数据成员在定义性说明时已分配了存储空间,所以通过静态数据成员名前加上类名和作用域运算符,可直接引用静态数据成员。在C++中,静态变量缺省的初值为0,所以静态数据成员总有唯一的初值。当然,在对静态数据成员作定义性的说明时,也可以指定一个初值
       3、静态数据成员具有全局变量和局部变量的一些特性。静态数据成员与全局变量一样都是静态分配存储空间的,但全局变量在程序中的任何位置都可以访问它,而静态数据成员受到访问权限的约束。必须是public权限时,才可能在类外进行访问
       4、为了保持静态数据成员取值的一致性,通常在构造函数中不给静态数据成员置初值,而是在对静态数据成员的定义性说明时指定初值

【静态成员函数】

可以将类的成员函数定义为静态的成员函数。即使用关键字static来修饰成员函数 。

class A 
{   
     float x, y;
     public :
     A( ){  }
     static   void sum(void)  { ..... }
};

对静态成员函数的用法说明以下几点:
1、与静态数据成员一样,在类外的程序代码中,通过类名加上作用域操作符,可直接调用静态成员函数。
2、静态成员函数只能直接使用本类的静态数据成员或静态成员函数,但不能直接使用非静态的数据成员 (可以引用使用)。这是因为静态成员函数可被其它程序代码直接调用,所以,它不包含对象地址的this指针
3、**静态成员函数的实现部分在类定义之外定义时,其前面不能加修饰词static。**这是由于关键字static不是数据类型的组成部分,因此,在类外定义静态成员函数的实现部分时,不能使用这个关键字
4、不能把静态成员函数定义为虚函数。静态成员函数也是在编译时分配存储空间,所以在程序的执行过程中不能提供多态性。
5、可将静态成员函数定义为内联的(inline),其定义方法与非静态成员函数完全相同。

二、指向类的指针

       一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。

相关文章:

  • 网络通信三大核心表项详解:MAC表、ARP表、路由表
  • 【AI插件开发】Notepad++ AI插件开发实践:从Dock窗口集成到功能菜单实现
  • CentOS 上 Apache Kafka 2.13-3.8.1 集群部署指南(ZooKeeper 模式)
  • 如何改电脑网络ip地址:一步步指导
  • 深度学习 Deep Learning 第14章 自编码器
  • 将视频m4s文件转换为mp4格式
  • 慧通测控:汽车RGB氛围灯功能测试介绍
  • 【VM虚拟机ip问题】
  • Javascript代码压缩混淆工具terser详解
  • 在ArcGIS中导入气候tif文件出现 “输入与输出之间的基准面冲突” 警告
  • C++\MFC锁lock从专家到小白
  • 基于银河麒麟桌面服务器操作系统的 DeepSeek本地化部署方法【详细自用版】
  • Etcd用的是Raft算法
  • Linux上位机开发实践(超越MPP去开发产品)
  • 青少年编程与数学 02-014 高中数学知识点 07课题、专业相关性分析
  • Blender模型导入虚幻引擎设置
  • 静态住宅IP的应用、设置及好处
  • 开发相关的一些网址收藏(持续更新中)
  • [原创](Modern C++)现代C++的关键性概念: 如何正确地返回函数指针?
  • 【Linux高级IO(一)】理解五种IO模型
  • 机器人助力、入境游、演出引流:假期纳客千万人次城市有高招
  • 五一假期,长三角铁路张家港、台州等多个车站客发量创新高
  • 深圳一购房者交首付后迟迟无法签合同,澎湃介入后开发商承诺退款
  • “模”范生上海,如何再进阶?
  • 陈逸飞《黄河颂》人物造型与借鉴影像意义
  • 德国旅游胜地发生爆炸事故,11人受伤