【C++再学习】【09】static、const与类

1、类的const数据成员

        在类内部,const数据成员代表在对象的生命周期内该数据成员不可更改,也就是说这个const修饰的是该对象的一个数据,它是属于对象的,只有在该对象的有效期内起作用。

        const数据成员不能在类声明时赋初值只能放到构造函数初始化列表中进行,这是因为我们知道const数据只能在被创建时初始化而不能被重新赋值,又由于构造函数体是在对象创建完毕之后调用的函数,所以只有在创建一个对象时完成const数据成员初始化,c++提供了构造函数初始化列表来实现。

        因为const数据成员是在对象创建时才进行初始化的,所以程序在编译时是无法判断const数据成员的值,所以类的const数据成员并不是编译时常量而属于运行时常量。

        那为什么不能直接在类声明中赋值呢?可能是因为类是不分配空间的,而const数据成员又不能是编译时常量,所以不能直接在类声明中初始化。

2、类的static数据成员

        在类内部,static数据成员代表了属于整个类的数据,并不属于单个对象,因此它在整个程序的运行过程中只有一个副本,不能在定义对象时对static成员进行初始化,就是不能用构造函数进行初始化。同样,static数据成员也不能在类声明中初始化,而是在类的实现文件中实现初始化,举个例子:int Test::count=10; static关键字只能用于类声明中,定义时不能加static

3、类的static const 数据成员(或者const static,作用一样)

        上边类的const数据成员只是属于某个对象的常量数据,要想建立一个在整个类的各个对象看来都是常量怎么办呢?就是static const数据成员,在类的声明时不能初始化,只能在类的实现文件中采用const int Test::count=10;来初始化,注意有前边有const

4、类的const成员函数

        const成员函数主要功能是:防止对象在调用成员函数时候意外修改了对象自身的数据成员,也就是说const成员函数只能获取成员变量的值而不能去修改,常见就是getXXX函数了。

        另外,还有一点需要注意的是当普通成员函数之外有同名同参的const成员函数时,构成了函数重载,此时如果对象为const对象,调用该同名函数时自动调用const成员函数。

5、类的static成员函数

        static成员函数主要目的是作为类作用域的全局函数。不能访问类的非静态数据成员。类的静态成员函数没有this指针,这导致:1、不能直接存取类的非静态成员变量,调用非静态成员函数2、不能被声明为virtual

        static成员函数和static数据成员一样,都属于类的静态成员,因此,对静态成员的引用不需要用对象名而直接使用类名。在静态成员函数的实现中不能直接引用类中的非静态数据成员。

        静态成员函数不可以同时声明为 virtualconstvolatile函数。不能用const的原因:static成员函数访问的值是其参数、static数据成员和全局变量,而这些数据都不是对象状态的一部分,而const成员函数主要是是说该函数不会修改当前对象的数据成员,既然static成员函数根本不访问非静态数据成员,那么就没必要使用const了。

 

最后,总结一下C++static的常见含义:

    ① 修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见;

    ② 修饰局部变量时,表明该变量的值不会因为函数终止而丢失;

    ③ 修饰函数时,表明该函数只在同一文件中调用;

    ④ 修饰类的数据成员,表明对该类所有对象这个数据成员都只有一个实例。即该实例归所有对象共有;

    ⑤ 修饰类成员函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值