类的静态成员函数和静态成员变量的使用

Static修饰成员方法的基本用法 一、 图例 二、 成员方法的分类 1、静态成员方法(有static修饰、属于类)、建议用类名访问、也可以用对象访问。 2、实例成员方法(无static修饰、属于对象)、只能用对象触发访问。 三、 使用场景 1、 表示对象自己的行为的、且方法中需要访问实例成员的、则该方法必须申明成实例方法。 2、 如果该方法是以执行一个通用功能为目的、或者需要方便访问、则可以申明成静态方法。 四、 成员方法的分类和访问分别是什么样的? 1、 静态成员方法(有static修饰、属于类和对象共享)访问格式 类名.静态成员方法 阅读详情

C++类静态成员与类静态成员函数

 
    当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关。
    静态数据成员的用途之一是统计有多少个对象实际存在。
    静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。
    静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值。
    静态成员的值对所有的对象是一样的。静态成员可以被初始化,但只能在类体外进行初始化。
    一般形式:
    数据类型类名::静态数据成员名=初值
    注意:不能用参数初始化表对静态成员初始化。一般系统缺省初始为0。

    静态成员是类所有的对象的共享的成员,而不是某个对象的成员。它在对象中不占用存储空间,这个属性为整个类所共有,不属于任何一个具体对象。所以静态成员不能在类的内部初始化,比如声明一个学生类,其中一个成员为学生总数,则这个变量就应当声明为静态变量,应该根据实际需求来设置成员变量。

#include "iostream"
using namespace std;
class test
{
private:
     int x;
     int y;
public:
     static int num;
     static int Getnum()
     {
          x+=5;   // 这行代码是错误的,静态成员函数不能调用非静态数据成员,要通过类的对象来调用。
          num+=15;
          return num;
     }
};
int test::num = 10;
int main(void)
{
     test a;
     cout<<test::num<<endl;        //10
     test::num = 20;
     cout<<test::num<<endl;        //20
     cout<<test::Getnum()<<endl;   //35
     cout<<a.Getnum()<<endl;       //50
     system("pause");
     return 0;
}
    通过上例可知:  x+=5;   // 这行代码是错误的
    静态函数成员必须通过对象名来访问非静态数据成员。
    另外,静态成员函数在类外实现时候无须加static关键字,否则是错误的。
    若在类的体外来实现上述的那个静态成员函数,不能加static关键字,这样写就可以了:
     int test::Getnum()
     {
       .........
     }
1、static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象是不能通过构造函数对其进行初始化。
2、静态成员不能在类定义里边初始化,只能在class body外初始化。
3、静态成员仍然遵循public,private,protected访问准则。
4、静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。
 

静态成员函数可以直接访问该类的静态数据和函数成员,而访问非静态数据成员必须通过参数传递的方式得到一个对象名,然后通过对象名来访问。


class Myclass
{
private:
        int a,b,c;
        static int Sum;    //声明静态数据成员
public:
        Myclass(int a,int b,int c);
        void GetSum();
};
int Myclass::Sum=0;       //定义并初始化静态数据成员
Myclass::Myclass(int a,int b,int c)
{
        this->a=a;
        this->b=b;
        this->c=c;
        Sum+=a+b+c;
}
void Myclass::GetSum()
{
        cout <<"Sum=" <<Sum <<endl;
}
int main(void)
{
        Myclass me(10,20,30);
        me.GetSum();
        system("pause");
        return 0;
}

 

由上例可知,非静态成员函数可以任意地访问静态成员函数和静态数据成员。
非静态成员函数Myclass(int a,int b,int c)和GetSum()都访问了静态数据成员Sum。
静态成员函数不能访问非静态成员函数和非静态数据成员。

 

关于静态成员函数,可以总结为以下几点:
出现在类体外的函数定义不能指定关键字static;
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
非静态成员函数可以任意地访问静态成员函数和静态数据成员;
静态成员函数不能访问非静态成员函数和非静态数据成员;
由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,
当同一类的所有对象使用一个量时,对于这个共用的量,可以用静态数据成员变量,这个变量对于同一类的所有的对象都取相同的值。静态成员变量只能被静态成员函数调用。静态成员函数也是由同一类中的所有对象共用。只能调用静态成员变量和静态成员函数。

转载声明:本文转自:http://blog.youkuaiyun.com/clc4210408/article/details/6775824

【C++深度剖析学习总结】 20 类的静态成员变量和类的静态成员函数 前言 经常有小伙伴问我,你是做C/C++的,那学C语言可以做什么呢?尤其是还在学校的同学,感觉自己学了很久,什么也做不了,一度怀疑自己是不是不适合程序员这个方向。 开始我都是直接说可以开发嵌入式啊,做操作系统啊,开发数据库啊等等,说到这,其实大家就应该明白了,C语言是接近底层的,他的很多应用都是处在摸不着看不见的后台,这对于初学编程的同学确实太不友好了,大家都喜欢所见即所得的效果,要不pytho... 阅读详情

相关推荐

RTX 50系显卡(5080/5090D)CUDA 12.8环境下的vLLM部署避坑与实战指南

本文为RTX 5080/5090D显卡用户提供了在CUDA 12.8环境下部署vLLM的完整实战指南。文章详细介绍了从驱动安装、CUDA 12.8环境配置、PyTorch Nightly版本精准匹配,到vLLM源码编译及常见报错排查的全过程,帮助开发者高效利用新一代硬件进行大模型推理。

gray5的博客 664

【笔试面试知识点查缺补漏深入理解之C与C++篇】C++中类的静态成员

转自:http://blog.sina.com.cn/s/blog_5f0d72800100swkz.html 当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实

ぁ風雲變色ぁ 1481

NVIDIA DGX Spark 开发环境深度配置与优化指南

定期系统维护每月执行一次完整的系统更新监控存储空间使用情况,及时清理临时文件定期检查硬件健康状况开发习惯优化使用tmux或screen管理长时间运行的任务配置自动化测试和代码质量检查建立完善的项目文档体系性能调优周期每月重新评估和调整系统参数根据工作负载特点优化容器配置持续监控和记录性能指标DGX Spark作为一个强大的AI开发平台,其真正的价值需要通过精细的环境配置和优化才能充分发挥。本文提供的配置方案和建议均基于实际生产环境经验,旨在帮助开发者构建稳定、高效、可维护的开发环境。

time_days的博客 3685

C++ static变量出现 无法解析的外部符号:public:static的错误

解决方法: 除了在头文件中定义以外,应该在类的生命之外重新定义一次。 .h中: class A { ... public: static int a; }; .cpp中: #include ... int A:a = 0; 原因: 静态变量虽然是成员变量,但是静态变量和全局变量都是在同一存储区存储的,程序初始化的时候就需要对该变量做初始化。所以静态变量的表现就...

mikasoi的博客 6540

C语言入门系列:指针入门(超详细)

指针与内存是息息相关的,在学习指针之前,先回忆下内存相关的知识。内存是程序运行期间存储数据的硬件设备,为了方便管理,计算机将内存划分为一个个小的单元,每个单元的大小是一个字节。如果把内存比作一栋酒店大楼,内存单元就像是一个个小的房间,数据就住在小房间里。我们知道,为了客人能准确找到属于自己的房间,酒店房间是有房号的。同样,内存单元也是有编号的,这个编号在计算机中称之为“内存地址。

epitomizelu的专栏 3695

Crazyflie 2.1固件刷写与地址配置全攻略:从开箱到连接Crazyswarm

本文详细介绍了Crazyflie 2.1微型无人机的固件刷写、地址配置及与Crazyswarm系统的集成方法。从开箱检查到多机协同飞行,涵盖了硬件准备、固件刷写、无线电地址修改等关键步骤,帮助用户快速实现集群飞行控制。特别针对Crazyswarm系统集成提供了实用配置示例和调试技巧。

weixin_42530458的博客 405

static简单实例说明其用法(转)

// static_test.h : 头文件 002 #pragma once 003 004 class static_test 005 { 006 public: 007 static_test();//默认构造函数 008 void set(int x, int y, int z);//成...

358

保研考研机试攻略(满分篇):第二章——满分之路上(1)

保研考研机试攻略(满分篇):第二章——满分之路上(1)2.1计算机和基础+2.2进阶背包问题+2.3毛毛虫算法

qq_63349644的博客 1195

c++ static类成员变量“无法解析的外部符号”、“多重定义的符号”错误问题

在使用C++实现单例模式过程中发现无法在类内定义static变量,于是又去复习了一遍static成员变量: 首先是一个有static成员变量的单例模式的类: class Cat { public: int a; static Cat* cv; Cat(){ cout << "new cat!!!" << endl; } static void fk(); };...

Marine_snow的博客 3437

译码器Multisim电路仿真汇总——硬件工程师笔记

本文详细介绍了74LS139D和74LS138D两种TTL译码器的功能特点及应用。74LS139D是2线-4线译码器,具有低电平有效输出和使能控制功能,常用于地址译码和数据分配。74LS138D是3线-8线译码器,通过3位输入实现8路输出控制,广泛应用于微处理器系统。文中提供了两种芯片的引脚说明、真值表和典型应用电路,并附有硬件工程师笔试面试相关资源链接。这些基础知识对数字电路设计和硬件工程师面试准备具有重要参考价值。

XU157303764的博客 1260

C++之2048小游戏 第二期

游戏会有初始化、绘制界面、处理输入、更新游戏状态、判断胜负等部分。所以,可能需要一个二维数组来表示4x4的网格,存储每个格子的数值。然后,需要处理键盘输入,尤其是方向键的控制,这可能需要使用EasyX的键盘事件处理函数。然后,关于图形绘制部分,每个格子的大小、颜色、数字的显示都需要设计。不同的数字对应不同的颜色,比如2是浅色,4稍深,以此类推。可能需要一个函数根据数字的值返回对应的颜色,然后在绘制时调用。接下来,处理数字的移动和合并逻辑。这是比较复杂的部分。

Lucky_Glory的博客 805

C++类中的静态成员函数以及静态成员变量

C++类中的静态成员函数以及静态成员变量

森明帮大于黑虎帮的博客 8371

YOLO26改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。YOLO26主要用于轻量化应用部署,相关轻量化改进与其整体架构非常适配。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 1091

C++-类-静态成员1:静态成员变量、静态成员函数、const静态成员属性

在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字static声明为静态的,称为静态成员。不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享。

u013250861的博客 1023

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

1.静态成员变量 1)普通成员变量  通过对象名能够访问public成员变量  每个对象的普通成员变量都是专属的,不能在对象之间共享 2)静态成员变量  静态成员变量属于整个类所有,所有对象共享类的静态成员变量  静态成员变量的生命周期不依赖于任何对象  可以通过类名和对象名访问public静态成员变量 3)静态成员变量的定义  静态成员变量在类的内部声明,声明时直接通过static关键字修饰  静态成员变量在类的外部定义与初始化,语法规则为Type ClassName::VarName = value;

u014583317的博客 551

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++中类和对象的静态成员变量和静态成员函数(附代码)

静态成员变量:存储数据,共享给整个类的所有对象,适合需要持久化或全局共享的数据。 静态成员函数:不需要对象支持即可访问,用于操作静态成员变量或提供独立功能的工具方法。

qq_40280673的博客 2652

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

c++ 类的静态成员变量和静态成员函数

1. 静态成员变量 先来回顾一下普通成员变量 通过对象名能够访问public成员变量 每个对象的普通成员变量都是专属的,不能在对象之间共享 在C++中还可以定义静态成员变量 静态成员变量属于整个类所有,所有对象共享类的静态成员变量 静态成员变量的生命周期不依赖于任何对象 可以通过类名和对象名访问public静态成员变量 静态成员变量的定义 静态成员变量在类的内部声明,声明时直接...

technologyleader的专栏 225

类的静态成员变量以及静态成员函数

类静态成员的作用:假设存在多个string对象,即string A ;和 string B ; 若string类存在静态成员static c,则针对于该变量A,B均共享同一个c,其实可以等同于在一个家庭中你和你的父母,女朋友共享同一个腾讯视频会员账号。 类静态成员的使用: 如下述代码,在类A中申明了静态变量a,此时不能进行初始化,是因为类申明只描述如何分配内存,但并不分配内存,类分配内存是在原文件创建对象后进行分配。 // A.h A的头文件 class A { private : stati

qq_42138448的博客 904

类的静态成员变量与函数

静态成员变量和静态成员函数都是类所有,对象共享,既可以通过类名访问,也可以通过对象访问。通过类名访问的前提是该变量是公有的,静态成员变量需要在类外单独分配空间,静态成员函数只能访问静态成员变量。

uxlike的博客 496

C++static类的静态成员变量和静态成员函数

特点1:前面有static特点2:类外初始化特点3:属于类,被所有对象共有,一个对象改变它,对其余所有对象有效。(牵一发动全身)以上代码,我们在test类中分别定义了一个静态成员变量与静态成员函数,首先来看下静态成员变量-静态成员变量-静态成员变量的-可以公有静态成员变量-可以公有静态成员变量-静态成员变量-静态成员变量在程序内部。

weixin_72715349的博客 482

静态成员函数与成员变量_C++:类的静态成员变量和静态成员函数详解

类static成员由该类所有对象共享的成员变量,要创建这样的成员,只需将关键字 static 放在变量声明的前面,并在类之外放置一个单独的变量定义,类的静态成员变量需要在类外分配内存空间;普通成员变量普通成员变量为类的各实例对象所各自拥有一份,且每个对象所占的内存大小为所有普通成员变量所占内存之和; class Test{public: Test(){}; ~Test(){}; void setA...

weixin_32481609的博客 207

类的静态成员变量/函数的调用

普通成员函数调用静态变量/函数通过类名作用域可直接调用,静态成语函数可以直接调用静态成员变量,但无法直接调用普通成员函数/变量,可以通过对象间接调用。

qq_61084129的博客 1260

c++类的静态成员(静态函数和静态变量)

标志:都会加上static 静态成员分为: 1.静态成员变量 所有的对象共享同一份数据,都可以对其做出永久性修改 在编译阶段分配内存 类内声明,类外初始化 2.静态成员函数 所有对象共享同一个函数 在编译阶段分配内存 静态成员函数只能访问静态成员变量(他不能访问非静态成员变量的原因可以从两个角度去理解:1.因为他是在编译阶段就分配内存,这时候还没有非静态成员变量的内存,他没办法访问。2.非静态成员变量名字都相同,编译器不知道访问哪个。) 示例一:静态成员变量 class Person { public:

admin的博客 1144

关于C++中类的静态成员变量和静态成员函数,你需要get这些知识点

个人看法:静态成员变量和静态成员函数属于类,而不属于某一个具体的对象。它们只在类的范围内有效,供所有的类对象访问和使用。

JunJie的个人博客 419

C++中类的静态成员变量与静态成员函数

C++中类的静态成员变量与静态成员函数

Li_t0010的博客 962
上一篇: 二叉排序树及其C代码
下一篇: 系统调用、函数调用
蜗牛Running
博客等级 码龄12年 61粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值