成员函数在类外定义的时候,函数名为啥不能加static

 

今天清理手机微信没用的数据【惊人啊,删了1G+的图,再删删其它没用的数据,腾出来3G+的空间】
无意间发现了一张以前聊天时候的图。

回忆了一下,当时讨论的是:为啥成员函数在类外定义时,函数名不能加static?

 

 

 

class Point  
{  
public:   
    void init()  
    {    
    }  
    static void output()  
    {  
    }  
};  
void main()  
{  
 
} 

 

这种在类结构的里面定义静态函数,用static修饰函数名很正常。

 

 

 

 

 

 

class Student    
{
public:  
    static void PrintfAllStudents();
};    
void Student::PrintfAllStudents()  
{  
  
}  
void main()    
{     

}  

但是这样在类内声明,在类外定义的,就不能再加static了。
static常用的两个作用,一个是作用域限制,一个是生存期限制。
对函数来说:
作用域限制:被static修饰的函数,只能用于代码本身文件的调用。
生存期限制:对函数来说,这条是用来说类的静态成员函数的。在类对象出生前,类的静态成员函数就活着了。

如果类外定义函数时在函数名前加了static,因为作用域的限制,就只能在当前cpp里用,
类本来就是为了给程序里各种地方用的,其他地方使用类是包含类的头文件,而无法包含类的源文件。
这样就导致无法在其他地方调用这个静态的类成员函数。如果要解决这个办法,就是在头文件中加extern。
然而extern和static是一对儿对立的关键字,不能用在一起。


所以在类外实现类成员函数时,函数名前加个static修饰符就报错了。

  • 28
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值