static关键字

static主要定义全局静态变量、定义局部静态变量、定义静态函数。
1.定义全局静态变量:
在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0.
c.该变量在本文件内从定义开始到文件结束可见。
2.定义局部静态变量:
在局部变量前面加上关键字static,其特点如下:
a.该变量在全局数据区分配内存。
b.它始终驻留在全局数据区,直到程序运行结束。
c. 作用域为局部作用域,当定义它的函数或语句块结束时,作用域结束。
3.定义静态函数:
在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
a.静态函数只能在本源文件中使用
b.在文件作用域中声明的inline函数默认为static类型
C++类中的static:
1.static成员变量:
相当于类的一个固有属性,与类产生的对象无关,但是类的所有对象进行的成员变量的操作都能影响到它的变化。同时,该成员变量不能在类之中进行初始化,只能在类外进行初始化。如果是static const 进行定义那么可以在类内部进行初始化
2.static成员函数:

static成员是类的组成部分并不是任何对象的组成部分,因此,static成员函数没有this指针。我们知道,一般而言,类中的成员函数具有一个附加的隐含实参,即指向该类对象的一个指针。这个隐含实参命名为this。因为static成员函数不是任何对象的组成部分,所以static成员函数就没有this形参了。由于成员函数声明为const说明该成员函数不会修改该成员函数所属的对象,所以static成员函数不能声明为const。为什么呢?因为static成员函数不是任何对象的组成部分。static成员函数可以直接访问所属类的static成员,但是不能直接使用非static成员函数!也不能访问static const 类型的成员!在上面的代码中static int age_play()函数中如果是return name或者是return k都不行!

#include  <iostream>
#include  <string>
using namespace std;
class Person
{
private:
    string name;
    static int age;	
    int k;
public:
    Person(const string&nm):name(nm)
    {}
    void Print()
    {
        cout<<name<<" is "<<age<<endl;
    }
    void age_change(int age){
    	this->age=age;
	}
    static int age_play(){
	cout<<age<<endl;
	return age;
	}
};
int Person::age=10;

int main()
{    
    Person person("tom");
    person.Print();
    Person person0("su");
    person.Print();			//su is 10
    person0.age_change(20);
    person0.Print();		//su is 20
    cout<<person0.age_play();
    cout<<endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值