首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊函数 , 该函数属于类 , 而不是属于 类实例对象 ; 静态成员函数调用不依赖于对象...: 即使 没有创建 类 实例对象 , 也可以 通过 类名:: 调用 类中定义 静态成员函数 ; 静态成员函数作用 : 静态成员函数 通常用于 执行与类本身相关操作 , 执行该函数 不涉及到 类实例对象中信息..., 也不能在 静态成员函数 中访问 普通 成员变量 和 成员函数 ; 2、静态成员函数声明 静态成员函数声明 : 使用 static 关键字 修饰 成员函数 , 就可以将 普通成员函数 转为 静态成员函数..., 普通 成员变量 和 成员函数 , 需要 通过 类 实例对象 来访问 , 需要 依托于 对象才能存在 , 而 静态成员函数 可以在 不创建 实例对象前提下被调用 , 因此 静态成员函数中 不能访问...”非法引用 " ; static void fun() { // 静态成员函数 中 访问非静态成员会报错 // error C2597: 对非静态成员“Student::m_age”非法引用

27620

静态成员函数和非静态成员函数区别?

一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。 它们根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象指针this。...f(Sc &s) 10 { 11 s.nsfn(10); // 转换为Sc::nsfn(&s , 10) 12 s.sfn(10); // 转换为Sc::sfn(10) 13 } 函数...对nsfn()调用,编译像注解那样进行转换,s地址作为第一个传递参数。(你并不实际写该调用,由编译来实现。)...在函数内部,Sc::nsfn()对非静态成员访问将自动把this参数作为指向当前对象指针。而当Sc::sfn()被调用时,没有任何对象地址被传递。因此,当访问非静态成员时,无this指针出错。...这就是为什么一个静态成员函数与任何当前对象都无联系原因。

1.8K90
您找到你想要的搜索结果了吗?
是的
没有找到

C++ 静态数据成员静态成员函数

在类中数据成员成员函数定义或声明前以static关键词开头,即构成静态数据成员静态成员函数。...那么应该如何完成静态数据成员初始化:静态数据成员初始化只能在类体外完成。...(); private: static int hour; //定义hour为静态数据成员 int minute; int sec; }; 2.静态成员函数意义 静态成员函数可以使一切不需要实例化就可以有确定行为方式函数使用起来更加方便...由于静态成员函数只能访问本类中静态数据成员,而无法访问非静态数据成员,这样使程序设计更加清晰。 3.静态数据成员特性 (1)静态成员函数属性: 静态成员函数属于类,而不属于某一个对象。...(2)静态成员函数访问: 静态成员函数只能访问本类中静态数据成员。 非静态成员函数可以访问本类中静态数据成员与非静态数据成员

1.4K50

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

静态成员函数 一般都是在静态成员函数中修改静态数据成员,在刚刚手机类声明中成员函数: static void change(); 就是静态成员函数。...我们给它来一个类外定义: void redmik30pro::change() { battery-=10; } 要注意是,静态成员函数只能访问静态数据成员静态成员函数,不能访问非静态数据成员,如果要访问非静态数据成员...但是非静态成员函数可以任意地访问静态成员函数静态数据成员。 那静态成员函数存在意义是什么?...首先,可能你在做题时候,题目要求你使用静态成员函数完成任务…… 开个玩笑啦…… 静态成员函数没有this指针,因为它在类创建时候就存在了,在没有创建类对象时候就已经存在静态成员函数,而普通函数必须在类对象被创建时候才能被使用...简而言之,静态成员函数是服务于类,而不是某个类对象,它方便在于不需要定义类对象就能使用。

14730

静态成员函数访问非静态数据成员【C++】

初始化: 类型 类名 :: 静态数据成员 = 初始化值 ; 详解:静态数据成员必须在类外初始化,不可在类体内,因为:构造函数中,如果可以,则每次建立对象,都会对静态数据成员值进行修改,这违背静态数据成员使用目的...静态成员函数名 (实参表) ; 注意 类外定义静态成员函数时,定义格式和普通成员函数定义格式相同,不再使用static修饰; 使用对象名和成员运算符(.)调用成员函数时,并非该函数属于某一对象,只是类与对象间桥梁...,为了能处理静态数据成员静态成员函数不能默认引用本类非静态数据成员原因: 当调用一个对象静态成员函数时,系统会将该对象起始地址赋予成员函数this指针。...然而,静态成员函数不属于对象,无this指针。所以静态成员函数不能访问类默认非静态成员(非静态成员函数和非静态数据成员)。...只要对静态数据成员值更新一次,就可以保证所有对象都会存取更新后值 由本例可知:静态成员函数不能引用本类非静态成员并非绝对,只是不可以进行默认访问,因为编译器不知道应该去寻找哪一个对象。

1.1K20

C++之静态成员变量和静态成员函数学习总结

1、c++中可以定义静态成员变量: 静态成员变量属于整个类所有 静态成员变量生命期不依赖于任何对象(上面的程序,每个对象成员变量是独立,所以打印出mCount值分别为1) 可以通过类名直接访问公有静态成员变量...静态成员变量隶属于类所有 每个对象都可以访问静态成员变量 静态成员变量在全局数据区分配空间 静态成员变量生命期是在程序运行期间 二、静态成员函数: 刚刚程序版本二里面其实我们还有一个功能没实现完:随时可以获取当前对象数目...1、在C++中可以定义静态成员函数静态成员函数是类中特殊成员函数 静态成员函数属于整个类所有 可以通过类名直接访问公有静态成员函数 可以通过对象名访问公有静态成员函数 2、静态成员函数定义: 直接通过.../a.out StaticFunc: main Begin... d.i = 10 StaticFunc: main End... 3、静态成员函数 vs  普通成员函: 静态成员函数 普通成员函数...4、小结: 静态成员函数是类中特殊成员函数 静态成员函数没有隐藏this参数 静态成员函数可以通过类名直接访问 静态成员函只能直接访问静态成员变量(函数) 三、总结: 好了,今天分享就到这里,如果文章中有错误或者不理解地方

56230

银行账户(静态成员与友元函数

友元函数声明形式为 friend void Update(Account& a); 在main函数中,定义一个Account类型指针数组,让每个指针指向动态分配Account对象,并调用成员函数测试存款...大家可以根据实际需求在类内添加新成员 要求所有和银行账户相关数据都不能用全局变量形式,必须封装在类内。...,但是它给出来不一定要给它定义,就像析构函数,在这里好像并没有起到什么作用,所以我们就没有给它具体定义。...可以看到这个类声明函数成员还是比较多,但是我们还需要往里面添加成员函数。...由于它三个静态数据成员被定义成了私有成员,我们只能通过成员函数去修改它,但原类声明中,并没有带与之对应参数成员函数,于是我们需要添加成员函数,一般修改静态数据成员都通过静态成员函数来修改,当然非静态成员函数也可以修改

15940

《挑战30天C++入门极限》C++类静态数据成员与类静态成员函数

C++类静态数据成员与类静态成员函数   在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象程序是由对象构成,我们如何才能在类范围内共享数据呢...这个问题便是本章重点:   声明为static成员或者成员函数便能在类范围内共同享,我们把这样成员称做静态成员静态成员函数。   ...便运行加1操作,静态成员初始化应该在主函数调用之前,并且不能在类声明中出现,通过运行过程观察我们发现,静态成员count状态并不会随着一个新对象新建而重新定义,尽而我们了解到静态成员函数由于与对象无关系...;//错误 cout<<count<<endl; }   静态成员函数与普通成员函数差别就在于缺少this指针,没有这个this指针自然也就无从知道name是哪一个对象成员了。...(类静态成员完全可以替代全局变量),这个例子理解重点主要是要注意观察类成员析构顺序,通过对析构顺序理解,使用析构函数来进行节点脱链操作。

66930

C++类成员函数 | 成员函数

C++成员函数性质 在C++中,类成员函数函数一种,它有返回值和函数类型,它与一般函数区别只是:  属于一个类成员,出现在类体中。...C++在使用类函数时,要注意调用它权限以及它作用域,私有的成员函数只能被本类中其他成员函数所调用,而不能被类外调用,成员函数可以访问本类中任何成员,可以引用在本作用域中有效数据。 ...一般做法是将需要被外界调用成员函数指定为 public,它们是类对外接口,但应注意,并非要求把所有成员函数都指定为 public。...这种函数作用是支持其他函数操作,是类中其他成员函数,类外用户不能调用这些私有的函数。  类成员函数是类体中十分重要部分。...C++类外定义成员函数 上述所讲成员函数是在类体中定义,在C++中也可以在类体中只写成员函数声明,而在类外面进行函数定义。

1.8K74

2021-04-14 quickjs调用类静态成员函数

有这样一个需求:多线程条件下执行交易,每个交易都会通过quickjs回调c++代码函数,而这个函数使用数据又来自于当前交易 首先不考虑用全局变量来保存交易数据,因为js回调c函数时候我们无法在回调函数中区分当前属于哪个交易...,如果你总是把交易id通过回调函数传递过来也是可以实现,只是这样函数就多了个参数,写js代码的人无法理解。...一个简单思路是c代码创建交易类,然后把类函数传递给quickjs,然后在js中调用这个类函数,但是这个实现不了,因为quickjs没有注入非静态成员函数接口,其原因文章非static成员函数通过类名...::来调用,空指针调用成员方法不出错!...讲解比较清楚 换个思路,我们先用js创建这个类,然后调用eval把类数据传递给它,这样调用这个类静态成员函数时候就可以正确访问到数据了,我们直接修改文件example.cpp 具体实现如下

92520

C++ 类静态成员

如果其中一个对象调用函数将其改变了,那么其他成员在访问这个静态成员变量时候值都是改变之后; ④、只要在类中定义了类静态成员变量,那么就占用存储空间了,不管有没有定义这个类对象,因为静态成员变量不属于任何类对象...静态函数 如果把函数成员声明为静态,就可以把函数与类任何特定对象独立开来。静态成员函数即使在类对象不存在情况下也能被调用,静态函数只要使用类名加范围解析运算符 :: 就可以访问。...静态成员函数只能访问静态成员数据、其他静态成员函数和类外部其他函数静态成员函数有一个类范围,他们不能访问类 this 指针。您可以使用静态成员函数来判断类某些对象是否已被创建。...静态成员函数成员函数区别 静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。...普通成员函数有 this 指针,可以访问类中任意成员;而静态成员函数没有 this 指针。

17130

#抬抬小手学Python# 类函数成员函数静态函数、抽象函数、方法伪装属性

十五、类函数成员函数静态函数、抽象函数、方法伪装属性 本篇博客是滚雪球学 Python 第二轮最后一篇博客,我们将内容继续提升到面向对象部分,为你补充类里面的一些装饰器,学习之后,希望你 Python...15.2 静态函数 @staticmethod ----------------------- 先掌握一个概念,静态函数不属于它所在那个类,它是独立于类一个单独函数,只是寄存在一个类名下,先建立这个基本概念...静态函数第一个参数不是实例对象 self,或者可以理解为静态函数没有隐形参数,如需要传递参数,在参数列表中声明即可。...15.3 类函数静态函数在继承类中表现 --------------------- 先创建一个父类,其中包含两个静态函数与一个类函数。..., 如果在子类中没有覆盖父类静态函数,那调用时使用是父类静态函数, 类函数同样遵循该规则。

92430

C++类this指针,静态成员,友元函数友元类

静态成员 在变量或者函数前面加上关键字:static,它就变了一个静态变量或者静态函数,当static出现在类中被修饰成员中,被成为静态成员。...也就是说在函数体内,静态变量具有“记忆”功能,即一个被声明为静态变量在这一函数被调用过程中其值维持不变,每个对象有各自成员变量,但是他们共享静态变量。所以静态变量相当于是大家共有资源。...所以this指针不能在静态函数中使用,静态函数如同静态变量一样,他不属于具体哪一个对象,静态函数表示了整个类范围意义上信息,而this指针却实实在在对应一个对象,所以this指针不能被静态函数使用...,在静态函数里面,不可以直接访问非静态成员。...友元函数友元类 所谓友元函数,就是在类中,用friend关键字声明一个函数,这个函数声明在类中,但不作为类成员函数,虽然友元函数不属于成员函数,却可以访问类中成员,不论成员是public,pirvate

1.4K10

【C++】static关键字及其修饰静态成员变量函数详解

在 C++ 中 static 内部实现机制:静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。...static成员概念 声明为static成员称为类静态成员,用static修饰成员变量,称之为静态成员变量;用static修饰成员函数,称之为静态成员函数。...静态成员变量和类对象和其成员变量关系如下图: 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问 静态成员函数没有隐藏...this指针,不能访问任何非静态成员;但非静态成员可以访问静态成员函数 静态成员也是类成员,受public、protected、private 访问限定符限制 ststic成员应用 利用static.../销毁数记录工作,可以从下面三个方向入手: 类对象创建数=构造函数静态成员变量++ 类对象销毁数=析构函数静态成员变量++ 类对象在生命周期数=构造函数静态成员变量-析构函数静态成员变量 设计一个类

31510

【C++】继承 ⑩ ( 继承机制中 static 静态成员 | 子类中访问父类静态成员方法 )

一、继承机制中派生类中 static 关键字 1、子类继承父类静态成员 子类继承父类静态成员 : 父类 ( 基类 ) 中 使用 static 关键字 定义 静态成员变量 , 可以被所有的 子类 (...派生类 ) 共享 ; 2、父类静态成员访问控制权限改变 继承自 父类 静态成员变量 , 仍然遵循 继承中 子类 访问控制特性 , public 公有继承 : 父类成员 在 子类 中 , 访问控制权限...成员 仍然是 private 成员 ; 3、子类如何访问父类静态成员 子类中 使用 父类类名 :: 静态成员名 Parent::c = 20; 或 子类类名 :: 静态成员名 Child::c = 40...; 或 对象名.静态成员名 child.c = 30; 方式 , 访问 继承自 父类 静态成员 ; 4、静态成员使用要点 参考 【C++】静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 |...静态成员不可用 int Parent::c = 10; 之后 , 才能使用 类 静态成员 , 如果没有在类外部初始化 , 该静态成员是无法使用 ; 二、完整代码示例 ---- 代码示例 : #include

30110
领券