共享数据的保护 利用const

来源:互联网 发布:app数据接口怎么写 编辑:程序博客网 时间:2024/04/30 07:10

      常对象:它的数据成员在整个的对象的生存期内不能改变。常对象必须进行初始化,而且不能被被新。

声明 常对象的语法形式为:

const 类型说明符 对象名;

用const 修饰的类成员

    1.常成员函数

类型说明符 函数名(参数表)const;

void print();

void print() const;

以上两个是对print()函数的重载。

注:

(1)const 是函数类型的一个组成部分,因此在函数定义部分也要带const关键字

(2)常对象只能调用常成员函数

(3)常成员函数不能改变目的对象的数据成员的值

#include<iostream>

using namespace std;

class A{

int i;

public:

A(int x):i(x){}

void print() const;

};


void A::print() const {

i+=1;       //删去此语句,程序将能运行成功

cout<<"i="<<i<<endl;

}

int main()

{

A a(2);

a.print();            //在调用常成员函数时,暂时将此对象视为常对象!!! a对象调用的

return 0;

}

以上程序运行错误,错误为在为常成员函数定义时,改变了对象a的数据成员i的值


2.常数据        比较 const int i;static const int q; static int w ;

const int i;需要通过初始化列表来获得初值,此值直到程序结束之前,不能对它进行更新


static  int w;可以直接赋值 利用  类型说明符  类名::w=? 来赋值,可以对它进行更新,但不会产生副本


static const int q;可以直接利用    const int  类名::q=?来赋值,不可以对它进行更新,也不会产生副本


 3.常引用  形参变为常引用 ,引用的对象的数据不能被更新

例子:

class A

func(const A & a)  a中的数据成员不能改变,不能调用此函数的非const成员函数

原创粉丝点击