【C++学习(6)】静态成员

一. 静态成员

"静态"是指的是他的作用域 局部于类。一个类可以可以创建多个对象,因此,"静态成员"提供了一种同类对象的共享机制。

① 静态数据成员

静态成员变量就是普通的成员变量前面加上static关键字就是静态成员变量。要求:1、类中申明;类外定义。

特点:

复制代码
        所有的对象共享同一份静态成员变量.
        在编译阶段分配内存,存储在全局数据区
        在类内声明,类外初始化,需要在类外单独分配空间.
        生命周期不依赖任何的对象,为程序的整个生命周期.
        即可以通过对象来访问,也可以通过类名来访问

② 静态成员函数

  • 普通的函数前面加上static关键字就是静态成员函数
  • 静态成员函数没有this指针,所以只能访问静态成员变量
  • 所有的对象共享静态成员函数,无论对象是否已经创建,都可以访问静态成员函数
  • 静态成员函数,不能调用普通的成员函数,只能调用静态的成员函数和静态数据成员
  • 普通的成员函数有this指针,可以访问内部的任意成员,而静态成员函数没有this指针,只能访问静态成员(静态成员变量和静态成员函数)

代码参考

二. 成员变量和成员函数分开存储

① 空对象占用字节的大小: 占用1个字节。当空类作为基类的时候,该类的大小就会被优化为0,这就是所谓的空白基类的最优化.

② 成员函数和变量分开存储

复制代码
    定义对象的时候会分配存储空间,但是只会为对象的成员变量分配存空间,成员函数则存放到公共的代码区.
    每个对象占用的的存储空间只是该对象的数据部分,而不包括成员函数.
    而成员函数存放在代码区,只有一份,那么怎么区分是哪个函数来调用的呢,通过this指针.

这里就引出了 this 指针了

相关推荐
2401_89207098几秒前
【Linux C++ 后端实战】异步日志系统 AsyncLogging 完整设计与源码解析
linux·c++·高并发·异步日志
梓䈑2 分钟前
gtest实战入门:从安装到TEST宏的单元测试指南
c++·单元测试
Seven973 分钟前
【从0到1构建一个ClaudeAgent】规划与协调-子Agent
java
宠友信息4 分钟前
社交软件源码哪个渠道好
java·微服务·架构·社交电子·springboot·uniapp
talen_hx2964 分钟前
《零基础入门Spark》学习笔记 Day 15
大数据·笔记·学习·spark
郝学胜-神的一滴5 分钟前
墨韵技术|CMake:现代项目构建的「行云流水」之道
c++·程序人生·软件工程·软件构建·cmake
improvement...6 分钟前
Maven 编译打包全指南:整体 / 逐个打包 + 核心参数详解
java·maven
雪域迷影7 分钟前
Hazel游戏引擎结构分析
c++·游戏引擎·hazel
_李小白8 分钟前
【OSG学习笔记】Day 41: ReadFileCallback 与 WriteFileCallback(自定义文件读取)
java·笔记·学习
“愿你如星辰如月”8 分钟前
从零构建高性能 Reactor 服务器:
linux·服务器·c++·websocket·tcp/ip