常引用,常对象,常成员函数,常数据成员~

来源:互联网 发布:外国名著推荐知乎 编辑:程序博客网 时间:2024/04/23 19:41

①常引用

形式—— const 类型 &对象名或变量名

②常对象

形式——const 类名 对象名

1.常对象的数据成员不能被修改了,在定义的时候应该对其进行初始化

2.常对象不能够调用普通成员函数——因为普通成员函数可能会修改对象的数据类型,这是不安全的。

3.常对象可以调用静态成员函数,常成员函数,其实也可以调友元函数  (但是这里不对每一个具体展开了,就只是为了更加明白常对象是不能调用普通的成员函数的即可)

③常成员函数

形式——返回值类型 方法名(参数表)

1.常成员函数不能改变对象的值,也不能在函数体里面调非常成员函数。

2.常对象可以调常成员函数和静态成员函数

3.常成员函数实现的时候,函数头是应该和声明的函数头一致的,const也是函数类型的一个组成部分,而对于友元函数和静态成员函数是不用friend和static的

4.非常对象也可以调用常成员函数,但是当常成员函数与非常成员函数同名的时候(可以视为函数重载),对于非常对象是会优先调用非常成员函数的。

④常数据成员

形式——const 数据类型 变量名;

        (当同时还是静态数据成员的时候)static const 数据类型 变量名;

1.常数据成员的初始化只能通过构造函数的列表来完成

class CPoint{public:CPoint(int xx, int yy,int zz);private:int x,y;const int z;};CPoint::CPoint(int xx, int yy, int zz) :z(zz){x = xx;y = yy;//z = zz;     这个是不被允许的,因为会报赋值号左侧必须是可修改的左值(可修改,有数据存储空间)}

2.但是静态的常数据成员必须在类外进行初始化,不能在构造函数中进行,并且const不能省

class CPoint{public:CPoint(int xx, int yy,int zz);private:int x,y;static const int z;};const int z = 10;  //const不能省,也是类型的一部分
3.如果类有多个重载构造函数,就应该在每一个重载构造函数的初始化列表中去初始化常数据成员,当然刚才说的2.除外。


0 0
原创粉丝点击