static静态成员

2023-05-16

静态成员包括:静态成员变量和静态成员函数。

一、静态成员变量

  1. 静态成员变量的特点。

  • 所有对象都共享一份数据。

  • 编译阶段就分配内存。

  • 只能在类内声明,类外初始化。

  • 静态成员变量也是有访问权限的。

1、验证  所有对象都共享一份数据。
class person {
public:
    static int m_A ;
};
int person::m_A = 100; //类内声明,类外初始化
int main()
{
    person m1;
    cout << m1.m_A << endl;//结果是100
    person m2;
    m2.m_A = 300;
    cout << m1.m_A << endl;//结果300
    return 0;
}

2、验证  只能在类内声明,类外初始化。
class person {
public:
    static int m_A = 100; //报错
};
//可以写成static const int m_A = 100;

这里有两个问题:

问题1:为什么static修饰的成员变量不可以在类内初始化??

答:静态成员变量是在编译时就分配内存,且是所有的实例化对象都拥有这一片内存空间,任何一个对象对齐修改,其余对象都会随之变化。如果说可以在类内初始化,那么我们每实例化一个对象出来就都会初始化一次,会产生矛盾,因为每一次初始化都开辟新的空间,没办法做到所有对象共享一片空间。

问题2:const 修饰的变量可以如何初始化??

答:很多网上的答案说的是,const修饰的成员变量只能在初始化参数列表中初始化。不能在类外初始化,也不能在定义时初始化。其实是错误的。不能在类外初始化是肯定的,但是可以在定义时初始化,编译器不会报错,也可以运行。但是不建议这样做,因为const修饰的成员变量的目的是防止成员函数对它任意修改,带来一些问题。对于每一个对象,const是常量,但是对于不同的对象const修饰的成员就不是常量,如果你在定义时就初始化就写死了。不建议但是可以成功。

3、静态成员也是有访问权限的。如果改成私有的,类外就不能访问了。class person {
private:
    static int m_A; //报错
};
int person::m_A = 100; //类内声明,类外初始化
int main()
{
    person m1;
    m1.m_A; //报错
    return 0;
}

静态成员变量是属于类的属性,不属于某一个对象。静态成员变量有两种访问方式:

class person {
public:
    static int m_A;
};
int person::m_A = 100; //类内声明,类外初始化
int main()
{
    // 通过对象访问。
    person m1;
    cout << m1.m_A << endl;
    // 通过类访问。
    cout << person::m_A << endl;
    return 0;
}

二、静态成员函数

  • 所有对象共享同一个函数

  • 静态成员函数只能访问静态成员变量

  • 静态成员函数也是有访问权限的。

访问方式也是有两种:通过对象访问和通过类来访问。

public:
    static void fun()
    {
        cout << "静态函数" << endl;
    }
};
int main()
{
    // 通过对象访问。
    person m1;
    m1.fun();

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

static静态成员 的相关文章

  • 在 C 中初始化结构体的静态数组

    我正在用 C 实现一个纸牌游戏 纸牌有很多种类型 每种纸牌都有大量信息 包括一些需要单独编写与其关联的脚本的操作 给定这样的结构 并且我不确定我的语法是否适合函数指针 struct CARD int value int cost This
  • 使用反射获取静态类列表

    很多问题都很接近 但没有一个能回答我的问题 如何使用 C 3 5 中的反射从程序集中获取所有静态类 我已经定义了所有类型 但没有 IsStatic 属性 计算 0 个构造函数确实很慢 而且也不起作用 有什么提示或一行代码吗 Chris 以下
  • 为什么c++中的构造函数不能声明为静态?

    我最近读完了第一卷 Bruce Eckel 的 Thinking in C 现在转向将这些知识应用到一些实际用途中 我最近正在使用静态成员函数 并尝试将构造函数设为静态 但编译器对此不满意 我查了书上的原因 但没有找到 谁能解释为什么 P
  • 在嵌入式 Jetty 上使用 DefaultServlet 提供静态 html 文件

    我正在开发一个需要独立的项目 因此我决定将 Jetty 嵌入到我的应用程序中 我将提供静态 HTML 页面 一些 JSP 页面 并且还将使用一些自定义 servlet 我找到了一个完美的示例 说明如何设置嵌入式 Jetty 来完成所有这一切
  • 为什么 OOP 中静态类的最佳实践有所不同?

    我目前正在阅读有关 Java 最佳实践的内容 我发现根据这本书 https rads stackoverflow com amzn click com 0321356683我们必须优先选择静态类而不是非静态类 我记得在 C 最佳实践中 我们
  • 重温经典的 C++ 静态初始化顺序惨败

    我最近遇到了一个奇怪的情况 让我们考虑下面的类 放在header h ifndef HEADER H define HEADER H include
  • 为什么 dotnet 的 char.IsLower() 是静态方法?

    这似乎违背了每一个设计准则 接受 T 类型的单个参数的静态方法通常应该只是一个成员方法 这太奇怪了我实际上不得不发布一个StackOverflow问题 https stackoverflow com questions 389100 is
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • 具有继承的静态块的行为

    我正在尝试使用这样的静态块 我有一个基类叫做Base java public class Base static public int myVar 和一个派生类Derived java public class Derived extend
  • java银行程序帐户ID不上去?

    每次创建银行帐户时 帐户 ID 都应增加 1 但每次我尝试提取 Id 时 我只会得到帐户 ID 为 0 任何建议 因为我完全按照我学习的书中的方式进行操作而且它仍然没有更新 帐户构造函数 public class BankAccount p
  • 但是创建静态实用方法不应该被过度使用吗?如何避免呢? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着时间的推移 java项目中引入了许多实用方法来完成更复杂和简单的任务 当使用静态方法时 我们在代码中引入了紧密耦合 这使得我们的代
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • 缓存静态 HTML 站点

    我通常使用 WordPress 但刚刚为客户完成了一个项目 该项目是一个静态 HTML 页面 由 8 个页面和每页约 2 个图像组成 使用 WordPress 我会使用 w3 总缓存 cloudflare photon 或通过 wp 引擎的
  • 在静态类中拥有状态是不好的做法吗?

    我想做这样的事情 public class Foo Probably really a Guid but I m using a string here for simplicity s sake string Id get set int
  • 设置惰性静态变量首先初始化然后分配?

    我意识到static变量是隐式的lazy 这真的很棒 执行以下操作在第一次调用之前不会创建实例 static var test Test 但是 将一个新实例分配给static变量初始化原始实例 然后分配新实例 这对我来说很麻烦 SomeTy
  • 在静态类中使用常量

    我一直在努力一个开源项目 http code google com p noda time 上周末当我遇到一些让我困惑的代码 http code google com p noda time source browse src NodaTi
  • Lisp 函数如何记住这段代码中的状态?

    我从网站上看到一段代码http www ccs neu edu home shivers newstyle html http www ccs neu edu home shivers newstyle html gt defun elem
  • 为什么静态字段初始化失败会导致NoClassDefFoundError?

    这是一个有趣的java问题 下面的简单 java 程序包含由方法静态初始化的静态字段 实际上 我强制计算 intiailize 值的方法引发 NullPointException 当我访问这样的静态字段时 将引发 NoClassDefFou
  • PHP 中 :: 和 -> 之间的区别

    我总是看到人们在严肃的项目中到处使用 而 gt 只是偶尔在本地环境中使用 我只使用 gt 自己 并且永远不会遇到需要类之外的静态值的情况 我是一个坏人吗 据我了解 唯一的情况是 gt 当我尝试以下操作时将不起作用 class StaticD
  • Nuxt js全静态动态页面,payload未定义

    我正在尝试动态生成页面 运行 nuxt generated 后 页面已成功创建 但是加载页面 使用 nuxt start 它说标题未定义 我在生成时在有效负载中发送 每个生成的页面都存在有效负载 js 但由于某种原因它无法工作 Page r

随机推荐

  • ping不通Linux服务器的原因?

    ping命令是各种操作系统中经常会用到的一个网络命令 xff0c 也是一个通信协议 xff0c 主要用来测试目标主机的连通性 xff0c 检查网络是否连通 问题 xff1a 那ping不通Linux系统服务器是什么原因呢 xff1f 总结
  • RHCE第二天

    作业 xff1a 1 配置chrony时间服务器 xff0c 确保客户端主机能和服务主机同步时间 两台机器 第一台机器作为时间服务器从ntp aliyun com同步时间 xff08 注意包含意外情况 xff0c 如果不能上外网 xff0c
  • ubuntu20.04版本 安装ros1与px4、mavros、QGroundControl

    基于个人安装时的操作以及所浏览的链接 xff0c 仅供参考 文章目录 前言一 pandas是什么 xff1f 二 使用步骤 1 引入库2 读入数据总结 前言 使用ubuntu下载ros px4似乎是一件十分繁琐以及困难的事情 xff0c 但
  • 无用的知识--定时提醒(go语言小工具)

    遇到喜欢的事情总是欲罢不能 xff0c 一不小心就酿成了打错 xff0c 比如说在B站上学习 xff08 卷 xff09 过度 xff0c 错过了重要的事情 不用担心 xff0c 今天分享go语言写一个windows系统中定时提醒小工具 p
  • 重装Office后打开Powerpoint和excel提示找不到VCRUNTIME140_1.dll的解决办法(亲测成功,简单有效)

    1 下载VCRUNTIME140 1 dll xff08 可搜索下载途径 xff09 2 将其复制到OFFICE安装目录 xff0c 如下 C Program Files Microsoft Office16 3 再次打开即成功 xff01
  • ERROR:zygote_host_。。。。。Running as root without --no-sandbox is not supported.

    安装好google后 xff0c 在命令行输入google chrome后出现 xff0c ERROR zygote host impl linux cc 89 Running as root without no sandbox is n
  • 【IOT开发】蓝牙模块与PC连接通讯实验

    这是在一个项目中 xff0c 需要开发 windows APP xff0c 通过蓝牙与下位机通讯 之前接触过的一些蓝牙项目 xff0c 大多是 模块与模块 通讯 xff0c 也见过很多模块 手机通讯的教程 xff0c 但PC端直接与蓝牙模块
  • Linux安装JDK详细教程(附图)

    Linux安装JDK详细教程 xff08 图文教程 xff09 这里介绍两种方式 xff1a yum安装方式和手动安装 1 yum安装 1 1 查看JDK版本 xff0c 找到你想要安装的JDK版本 xff0c 这里以 JDK1 8 为例
  • AD布线后批量改线宽

    最近在学习AD画板 xff0c 打算布线结束后再改线宽 xff0c 遇到了一些问题 xff0c 经过网上的资料已经解决 首先 xff0c 右键空白处 xff0c 选择第一个 查找相似对象 然后用十字标选择想要更改的线 在弹出的框中更改 NE
  • 使用springboot启动类报错: 找不到或无法加载主类怎么解决?

    出现问题的原因是 xff1a 在使用springboot启动类时 xff0c 并没有写错代码和注解 xff0c 然后它还是报错找不或无法加载主类 解决此问题的办法 就是 xff0c 重新在项目结构中的Modules吧项目移除再次加载进了即可
  • 【iOS】---pthread,NSThread

    在iOS中多线程开发有四种方式 xff0c 在之前我们浅浅了解了一下GCD xff0c 这期来看看pthread和NSThread pehread pthread简介 pthread 是一套通用的多线程的 API xff0c 可以在Unix
  • 如何关闭windows11 Defender防火墙

    windows Defender是windows系统自带的防火墙 xff0c 但是由于它太过于敏感 xff0c 导致很多软件 xff0c 程序被误杀 一般默认开启时 xff0c Denfender防火墙拦截时会弹出提示 下面教大家如何关闭w
  • C++友元类和友元函数

    特点 xff1a 能访问私有成员 破坏封装性 友元关系不可传递 若B是A的友元 xff0c C是B的友元 xff0c 但C不一定是A的友元 xff0c 要看类中是否有申明 友元关系的单向性 若A是B的友元 xff0c 但B不一定是A的友元
  • windows和Ubuntu(linux操作系统)之间如何进行文件互传

    Windows和Ubuntu下的Linux操作系统之间的文件互传需要用到应用层的FTP协议 xff08 文件传输协议 xff09 xff0c 设置方法如下 xff1a 1 xff1a 打开Ubuntu下的Linux操作系统的FTP服务 打开
  • 有网但浏览器不显示网页如何解决

    如果网络没有问题 xff0c 但是浏览器显示不了网页 xff0c 首先考虑是不是DNS出了问题 xff0c 导致域名解析失败 如何解决呢 xff1f 1 打开控制面板 xff0c 打开所有控制面板 找到网络和共享中心 2 找到Interne
  • pycharm下的vc2没有代码提示(不用改文件)

    我第一次遇到cv2没有代码提示的时候也是一脸懵逼 xff0c 在网上搜索了各种解决办法 包括但不限于修改 init py文件 xff0c 复制文件 xff0c 降低opencv的版本等 xff0c 都没有用 但是最后还是参考网上建议以及自己
  • delete和delete[]的区别

    对于简单类型 简单类型像 int char int long struct等 由于对象是没有析构函数的 所以delete和delete 是一样的 int arr 61 new int 10 delete arr delete arr 两种方
  • Result Maps collection already contains value for…BaseResultMap

    异常信息 Result Maps collection already contains value for BaseResultMap 假如使用generatorSqlmapCustom逆向工程生成代码 xff0c 即生成dao文件和ma
  • Debian 11 软件最大化占不满屏幕

    原来是自己不知何时手长把 Workspace margin 给设置了 xff0c 导致软件最大会占不满全屏 就是设置 gt Workspace gt margins 把 17 改成 0 就好了 曾一度难受的想重装系统 xff0c 原来是这么
  • static静态成员

    静态成员包括 xff1a 静态成员变量和静态成员函数 一 静态成员变量 静态成员变量的特点 所有对象都共享一份数据 编译阶段就分配内存 只能在类内声明 xff0c 类外初始化 静态成员变量也是有访问权限的 1 验证 所有对象都共享一份数据