static 静态成员变量 静态成员函数 类中使用

2023-05-16

关于在类中使用static的一些情况:

 

静态成员函数和静态成员变量的调用格式,尽量采用类名::成员的格式,不要以对象来调用


1. static func静态成员函数

  1) 其地址可以直接由函数指针来存储,普通函数其地址只能是由类中的函数指针来存储,如:
    class base{
         static int func1();
         int func2();
    };

    int (*pf1)()=&base::func1;//普通的函数指针
    int (base::*pf2)()=&base::func2;//成员函数指针

    这也就是说,如果在类外面去存储类中的函数指针,以便在某个时机去调用的话,只能将该函数声明为static的(注意:尝试去取对象的普通成员函数地址是非法的)。

    常见的场景是:
        a. 类中的某个函数要被注册成类外的回调函数,由于要存储类中的函数指针,只能将该函数声明称静态的。
        b. 创建线程(类内或外),要传递函数指针,也需要声明称static的,原理都是一样的。
     总结:如果在逻辑处理到类外时需要存储类中某函数的地址,则需要将该函数声明称static的。
     常见的就是:在类内或类外调用某个函数,要求传递函数指针,那么要传递类中的函数,只能声明称static的,这样才可以让参数的局部变量来存储它,如回调函数。

  2) 静态成员函数由于是类级别的,不含this指针,故不能直接访问类中的普通成员变量,但可以在函数中加上对象的引用,来控制访问哪个对象的普通成员变量,当然,是可以访问static 成员变量的。

      这个也可以从取地址的角度来分析:
      当静态成员函数尝试直接访问普通成员变量时,它首先要确认普通成员变量的内存地址,但由于没有this指针,该普通成员变量是无效的,不属于对象的,故无法找到它的地址,故无法访问。

  3) 静态成员函数不能加任何修饰符,如const,virtual, volatile等。

 

2. static member静态成员变量

   1) 实质是全局对象的概念,只是放在类中,多了访问控制用域的概念,对类的所有对象共享,类外,也可以想办法访问。故其定义(初始化)不要放在头文件中,否则会报连接错误,重复定义。
   2) 可以作为成员函数的缺省参数,普通成员函数不行,如
   class base{ 
    public :
            static int _staticVar;
            int _var;
            void foo1(int i=_staticVar);//正确,_staticVar为静态数据成员 
            void foo2(int i=_var);//错误,_var为普通数据成员
   };

   3)静态成员变量的类型可以是所属类的类型,普通的成员变量不行,只能是指针或引用,如

   class base{
   public :
           static base _object1;//正确,静态数据成员
           base _object2;//错误
           base *pObject;//正确,指针
           base &mObject;//正确,引用 
   };
  4)静态成员变量不受const成员函数限制,可以被修改。


  
  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

static 静态成员变量 静态成员函数 类中使用 的相关文章

  • Typora图床设置

    1 使用SM MS xff0c 进入User Login SM MS Simple Free Image Hosting 2 注册并登录 3 进入typora 的偏好设置中 4 选PicGo Core然后下载 xff0c 下载完毕之后打开配
  • loading加载效果(纯css)

    一 平滑加载 lt div class 61 34 loading 1 34 gt lt div gt box sizing border box loading 1 margin 0 auto width 120px height 20p
  • PX4和Pixhawk的故事

    Pixhawk由Lorenz Meier于2008年创建 2008 寻找自主飞行 故事始于对自主飞行的追求 xff0c Lorenz想让无人机使用计算机视觉自主飞行 xff0c 他在苏黎世联邦理工学院攻读硕士学位的时候开始了一个研究项目 x
  • 备赛电赛学习STM32(十四):MPU6050

    一 MPU6050的简介 6轴是3轴加速度 3轴角速度 9轴就是3轴加速度 3轴角速度 3轴磁场强度 10轴就是3轴加速度 3轴角速度 3轴磁场强度 气场强度 这么多的数据 经过融合之后可进一步得到姿态角或者叫欧拉角 以我们这个飞机为例 欧
  • 【STM32】STM32单片机结构及部件原理

    STM32是目前比较常见并且多功能的单片机 xff0c 要想学习STM32 xff0c 首先要去了解它的基本构成部分以及各部分的原理 单片机型号 xff1a 正点原子STM32F103ZET6 目录 STM32内部结构总览图 xff1a 2
  • hadoop伪分布模式搭建(详细步骤)

    一 前期准备 1 关闭防火墙 2 安装好JDK 3 准备hadoop安装包 二 安装hadoop伪分布模式 1 在home hadoop software 路径下创建hadooptmp目录 2 解压hadoop 3 3 0 tar gz 3
  • ZooKeeper does not recover

    ZooKeeper does not recover from crash when disk was full Description The disk that ZooKeeper was using filled up During
  • FreeRTOS基础知识学习笔记

    先说RTOS xff0c 在以前单片机中要执行完上一个程序才会执行下一个程序 xff08 当然有中断来临会先执行中断程序 xff09 xff0c 在RTOS中会将两个程序交叉进行 比如 xff0c 写作业和锻炼在单片机中写作业时锻炼是没有执
  • cmake使用教程(十,带你全面掌握高级知识点

    执行该脚本后 xff1a Stepfile git master cmake P write cmake Stepfile git master tree test test txt test txt write cmake 1 direc
  • 【回溯法】八皇后问题

    问题描述 在国际象棋棋盘 8 8 8 times8 8 8 上放置八个皇后 xff0c 要求每两个皇后之间不能直接吃掉对方 皇后
  • java——spring boot集成kafka——kafka线上问题优化——如何实现延迟消费

  • FreeRTOS入门笔记(任务管理,消息队列,信号量)

    FreeRTOS 一 任务 FreeRTOS操作系统支持多任务并发执行 xff0c 可以看成每个任务可以写一个 main 函数 xff0c 在死循环里执行 1 任务创建与删除 创建 xff08 1 xff09 任务可以在CubeMx中创建
  • java数组中删除元素或一个数组元素

    java数组中删除元素或一个数组元素 删除数组中单个元素删除数组中多个元素 xff08 数组表示 xff09 这里直接介绍两种情况 xff1a 1 删除数组中单个元素 2 删除数组中多个元素 xff08 数组表示 xff09 删除数组中单个
  • 大数据工具Maxwell的使用

    1 Maxwell简介 Maxwell 是由美国Zendesk公司开源 xff0c 用Java编写的MySQL变更数据抓取软件 它会实时监控Mysql数据库的数据变更操作 xff08 包括insert update delete xff09
  • YOLOV4-pytorch环境配置

    YOLOV4 pytorch环境配置 环境配置过程 xff1a 创建环境安装pytorch安装包遇到的坑 xff1a 1 scikit image2 opencv python 训练过程 xff1a 数据集格式转换 xff1a 训练过程中遇
  • 嵌入式服务器boa移植

    移植嵌入式服务器boa的过程 xff0c 在论坛里面可以搜到好多 xff0c 其中也会有出现错误时对应的解决方法 xff0c 在这里就不赘述了 在这里我介绍一下我移植过程中出现的问题 xff1a boa not found 总结一下这个问题
  • 数据架构简介

    01 数据架构的起源 追根溯源是一个数据人的底层思维逻辑 xff0c 因此 xff0c 我们先说一说数据架构的起源 xff08 来源也行 xff0c 一个意思 xff09 其实 xff0c 我们现在IT行业经常说的软件架构 系统架构 XX架
  • 【Python基础教程】print语法的使用

    大家好 xff0c 这里是万瑞科技 今天我们来学习一下Python中最基础的语法 print语法 首先我们来看一下print语法该怎样写 xff1a print 34 34 上面的语法是输出 打印某段文字的语法 但要注意 xff1a 语法中
  • STM32驱动步进电机 梯形算法库函数版

    关于梯形算法的原理查看 xff1a AVR446 Linear speed control of stepper motor 里面有原理和代码 xff08 库函数版F4 xff09 废话不多说直接上链接 xff1a 梯形算法驱动步进电机 z
  • VC6.0下载和安装教程

    Microsoft Visual C 43 43 xff0c xff08 简称Visual C 43 43 MSVC VC 43 43 或VC xff09 是Microsoft公司推出的以C 43 43 语言为基础的开发Windows环境程

随机推荐

  • Code::Blocks使用教程

    使用之前我们先准备一段代码 include lt stdio h gt include lt stdlib h gt int main printf 34 欢迎进入www dotcpp com编程网站 xff01 34 system 34
  • Dev-C++下载和安装教程

    Dev C 43 43 是一个Windows环境下的一个适合于初学者使用的轻量级 C C 43 43 集成开发环境 xff08 IDE xff09 它是一款自由软件 xff0c 遵守GPL许可协议分发源代码 它集合了MinGW中的GCC编译
  • Dev C++使用教程

    我们在使用之前先准备一段C语言代码 include lt stdio h gt int main printf 34 欢迎进入C语言网 xff01 34 return 0 初步使用这款软件 xff0c 我们先选择源文件进行创建 xff0c
  • Altium Designer安装教程

    Altium Designer 21软件简介 xff1a Altium Designer 21是一款由Altium开发团队全新推出的简单易用 xff0c 与时俱进 xff0c 功能强大的PCB设计软件 xff0c 可以方便用户快速完成各类原
  • Matlab 2021b安装教程-Matlab分析软件下载方法

    MATLAB是美国MathWorks公司出品的商业数学软件 xff0c 用于算法开发 数据可视化 数据分析以及数值计算的高级技术计算语言和交互式环境 xff0c 主要包括MATLAB和Simulink两大部分 下载方法 https docs
  • STM32嵌入式面试知识点总结

    一 STM32F1和F4的区别 xff1f 解答 xff1a 参看 xff1a STM32开发 STM32初识 内核不同 xff1a F1是Cortex M3内核 xff0c F4是Cortex M4内核 xff1b 主频不同 xff1a
  • Keil系列教程01_Keil介绍、下载、安装与注册

    1写在前面 对于学习单片机和嵌入式开发的朋友来说 xff0c 掌握Keil这款软件可以说是必备的技能 鉴于目前网上没有完整的Keil教程 xff0c 因此我打算整理一套完整的Keil系列教程 目前Keil有四种产品 xff08 软件 xff
  • Keil系列教程02_新建基础软件工程

    1写在前面 目前Keil的四款产品 xff08 软件 xff09 xff1a MDK ARM C51 C251 C166 xff0c 在用法上极为相似 xff0c 包括本文讲述的新建软件工程 本文以目前 xff08 2018年10月 xff
  • 机器学习多分类器有哪些

    常见的有 xff1a 决策树分类器 xff08 Decision Tree Classifier xff09 支持向量机分类器 xff08 Support Vector Machine Classifier xff09 朴素贝叶斯分类器 x
  • Keil系列教程03_主窗口和工具栏详细说明

    1写在前面 本文先让大家简单认识一下Keil的主窗口界面 xff0c 然后再进一步认识Keil的文件 编译和调试工具栏 Toolbars工具栏就是在菜单下面的两行快捷图标按钮 xff0c 这些快捷按钮之所以在工具栏里面 xff0c 在于它们
  • 【Linux驱动】Linux--V4L2视频驱动框架

    Linux V4L2视频驱动框架 Linux V4L2驱动框架一 V4L2 框架二 V4L2驱动主要数据结构三 V4L2提供的外部接口四 V4L2驱动框架模板五 虚拟摄像头驱动 参考资料 Linux V4L2驱动框架 一 V4L2 框架 v
  • PostMan——安装使用教程(图文详解)

    为了验证接口能否被正常访问 xff0c 我们常常需要使用测试工具 xff0c 来对数据接口进行检测 好处 xff1a 接口测试工具能让我们在不写任何代码的情况下 xff0c 对接口进行调用和调试 下载并安装PostMan 首先 xff0c
  • c++中::和:的区别

    在 C 43 43 中 xff0c 34 34 和 34 34 都是类成员初始化的运算符 34 34 是域运算符 xff0c 用于访问类的静态成员 xff0c 如静态变量和静态函数 在这里我们给出一个例子 xff1a class A pub
  • 程序=算法+数据结构

    JAVA 数据结构 及 基础算法 算法 xff1a 解决问题的流程 步骤 xff08 分支 循环 顺序 xff09 数据结构 xff1a 将数据按照某种特定的结构来保存 设计良好的数据结构会导致好的算法 凭借一句话获得图灵奖的Pascal之
  • 【嵌入式】stm32+freeRTOS移植与应用

    freeRTOS 源码移植 手动移植 xff1a freeRTOS官网 点击Download FreeRTOS点击Download解压zip文件 FreeRTOS是内核文件夹 xff0c 只需关注这个 FreeRTOS Demo 示例程序
  • benchmark

    一 定义 xff1a benchmark译为基准测试 xff0c 基准测试是指通过设计科学的测试方法 测试工具和测试系统 xff0c 实现对一类测试对象的某项性能指标进行定量的和可对比的测试 二 基准的特征 xff1a 相关性 基准应该度量
  • 在 Linux Ubuntu / Windows 10配置 RealSense 开发环境 开发预处理以及了解树莓派3

    Linux Ubuntu 首先 xff0c 打开Intel Realsense 官网 Intel RealSense Computer Vision Depth and Tracking cameras intelrealsense com
  • Docker的安装(基于windows的安装)

    在安装windows前需要有几个准备工作 1 启用Hyper V以在 Windows 10上创建虚拟机 xff1a a 使用 PowerShell 启用 Hyper V 在windows中搜索powerShell 使用管理员身份打开控制台
  • 提交代码前未拉取代码,导致冲突及解决办法

    前提 xff1a 和同事协作开发代码 xff0c 用git管理的项目 xff0c 在vscode可视化工具里面拉取项目代码 xff0c 没有反应 xff0c 然后在git里git pull xff0c 也没拉到远端的代码 xff0c 就提交
  • static 静态成员变量 静态成员函数 类中使用

    关于在类中使用static的一些情况 xff1a 静态成员函数和静态成员变量的调用格式 xff0c 尽量采用类名 成员的格式 xff0c 不要以对象来调用 1 static func静态成员函数 1 其地址可以直接由函数指针来存储 xff0