static与const

static

“static”是用于控制变量的生命周期和连接方式(即其作用域,亦即可见性)的保留字

函数调用的结果不会访问或者修改任何对象(非static)数据成员,这样的成员声明为静态成员函数比较好。且如果static int func(....)不是出现在类中,则它不是一个静态成员函数,只是一个普通的全局函数,只不过由于 static 的限制,它只能在文件所在的编译单位内使用,不能在其它编译单位内使用。

而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。

因此定义静态函数有以下好处:
  <1> 其他文件中可以定义相同名字的函数,不会发生冲突。
  <2> 静态函数不能被其他文件所用。

在类中,用static声明的成员变量静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。

用static声明的方法是静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员

static int fun(int j) {
    static int i = j;    //i只初始化一次,为5
    return ++i;       //先++ ,所以i为6,以后每次调用fun时,只执行++i;
}
int main(int argc, char * argv[]) {
    int i = 0;
    int j = 5;
    for (;j != 0; --j) {
        i = fun(j);   //返回值为 6  7 8 9 10
    }
    std::cout << i << std::endl;
    return 0;
}

例子2:

int func(){

}int main(int argc, char * const argv[]) 
{    func(); // 输出0   
 func(); // 输出1    
 func(); // 输出2   
 return 0;
 }
 
 例子3:
 class Request
 {    
    private:  
            static int count; // 不能为外部调用       
            string url; // 只能被成员函数调用      
    public:      
            Request() { count++; }        
            string getUrl() const { return url; }        
            void setUrl(string value) { url = value; }        
            static int getCount() { return count; }
};
int Request::count = 0; // count 可以在类声明外进行初始化(不能加static),不可以类内初始化

 类中的static变量是属于类的,不属于某个对象,它在整个程序的运行过程中只有一个副本,因此不能在定义对象时 对变量进行初始化,就是不能用构造函数进行初始化,其正确的初始化方法是:

数据类型 类名::静态数据成员名=值

const

转载:https://www.cnblogs.com/phpzhou/p/6390869.html

   cosnt成员函数主要目的是防止成员函数修改对象的内容。即const成员函数不能修改成员变量的值,但可以访问成员变量。当方法成员函数时,该函数只能是const成员函数。

const数据成员的初始化只能在类的构造函数的初始化列表中进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现,或者static cosnt

  1. #ifdef A_H_  
  2. #define A_H_  
  3. #include <iostream>  
  4. using namespace std;  
  5. class A  
  6. {  
  7. public:  
  8.       A(int a);  
  9.       static void print();//静态成员函数  
  10. private:  
  11.       static int aa;//静态数据成员的声明  
  12.        static const int count;//常量静态数据成员(可以在构造函数中初始化)  
  13.        const int bb;//常量数据成员  
  14. };  
  15. int A::aa=0;//静态成员的定义+初始化  
  16. const int A::count=25;//静态常量成员定义+初始化  
  17. A::A(int a):bb(a)//常量成员的初始化  
  18. {  
  19.       aa+=1;  
  20. }  
  21. void A::print()  
  22. {  
  23.       cout<<"count="<<count<<endl;  
  24.       cout<<"aa="<<aa<<endl;  
  25. }  
  26. #endif  
  27. void main()  
  28. {  
  29.       A a(10);  
  30.       A::print();//通过类访问静态成员函数  
  31.       a.print();//通过对象访问静态成员函数  
  32. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值