C++ 类中的static 成员函数

简介
同静态成员变量一样,静态成员函数在类里面定义,作用域为整个类,所有类的对象共享静态成员函数

特征

由于没有传递this 指针,静态成员函数只能访问static 成员 不能访问非static 成员

用法

复制代码
 1 class ex{
 2     private:
 3         int _non_static;
 4         static int _static;
 5     public:
 6         int h(){
 7             return _non_static;
 8         }
 9         static int g(){
10             //_non_static=0; (不正确) 
11             //静态成员函数不能访问非静态成员变量 
12             return _static;
13          }
14         static int f(){
15             //h();        (不正确) 
16             //静态成员函数不能访问非静态成员函数 
17             return g();
18         }
19 };
20 int ex::_static= 0;//static 成员变量可以在类外改变 
21 int main(){
22     ex var;
23     ex* pointer=&var;
24     var.f();//方式一:点运算符 
25     pointer->f();//方式二:箭头运算符 
26     ex::f();//方式三: 类名:静态成员函数名 
27     return 0;
28 }
复制代码

这里要注意:static函数在类内声明、类外定义时,类内要写明static 类外则不能加static关键字,如下,会报错

复制代码
 1 class ex{
 2     public:
 3         static int f();
 4 };
 5 /*错误的示范 
 6 static int ex::f(){
 7     return 0;
 8 }
 9 */
10 //应该这样写 
11 int ex::f(){
12     return 0;
13 }
14 int main(){
15     return 0;
16 }
复制代码

因为在类体外声明static 会将成员函数作用域扩大到文件,比类的域要大,所以会报错

[Error] cannot declare member function ... to have static linkage

作者:cdsidi

出处:https://www.cnblogs.com/cdsidi/p/12638411.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   CDsidi  阅读(4115)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题