C++中const型数据小结

几种const类型数据的用法和区别,先总结如下:

形式含义
Time const t;t是常对象,其值在任何情况下都不能被改变
void Time::fun()const;fun是Time类中的常成员函数,可以引用,但不能修改本类中的数据成员
Time* const p;p是指向Time类对象的常指针变量,p的值(p的指向)不能改变
const Time* p;p是指向Time类常对象的指针变量,p指向的类对象的指不能通过p来改变
const Time &t1 = t;t1是Time类对象t的引用,两者指向同一块存储空间,t的指不能改变

以下为详细解释:

1 常对象

在定义对象时加关键字const,指定对象为常对象,且常对象必须有初值。

Time const t1(12,23,24); //定义t1为常对象
//在t1的生命周期内,对象t1中的数据成员都不能发生改变。

说明:

  1. 如果一个对象被声明成常对象,则通过该对象只能调用它的常成员函数,而不能让调用该对象的普通成员函数。
Time const t1(2,4,5);//定义常对象t1
t1.get_time();       //常对象t1调用普通的成员函数,非法,是防止普通的成员函数修改常对象中数据成员的值

如何才能应用常对象当中数据成员呢?将该成员函数声明为const即可。

void get_time() const; //将函数声明为const,表明get_time()是const类型函数,即常成员函数。
  1. 常成员函数可以访问常对象当中的数据成员,不能修改常对象中数据成员的值。

2 常对象成员

  1. 常数据成员
    在类体中定义了常数据成员hour:
const int hour; //定义hour为常数据成员
  1. 常成员函数
void get_time() const; //声明一个常成员函数,注意const的位置

注意:常成员函数只不能调用非const的成员函数。

3 指向对象的常指针(指针常量)

将指针变量声明为const型,const和后面的ptr紧挨着,指针变量始终保持不变,不能修改,即其指向不变。

Time t1(1,2,3), t2; //定义对象
Time* const ptr1; //const位置在指针变量名前面,指定ptr1是常指针变量
ptr1 = &t1;       //ptr1指向对象t1,此后指针的指向不能变
ptr1 = &t2;       //错误,ptr1指向不能改变

//也可以将上述2,3行综合起来
Time* const ptr1 = &t1;

注意:指向对象的常指针变量的指向不能改变,它指向了t1对象,就不能改变,但是不影响t1对象当中值的修改。

4 指向常对象的指针变量(常量指针)

定义一个指向常变量的指向变量ptr:

const char* ptr; //const和char相连,表示指针变量ptr指向的char变量是常变量,不能通过ptr来改变其值。

说明:

  1. 指针的指向可以修改,但是指针指向的值不能改。
const char c[] = "nihao"; //定义const型的char数组
const char * p1; //定义p1为指向const型的char变量的指向变量
p1 = c;        //合法,p1指向常变量
char *p2 = c; //不合法,p2指向常变量的指针变量
  1. 如果函数的形参是普通的变量的指针变量,实参只能指向普通变量的指针,不能指向const变量的指针。

5 常对象的引用

一个变量的引用就是变量的别名。如果不希望在函数中修改实参t1的值,可以把fun函数的形参t声明为const:

void fun(const Time &t);

这样在函数中就不能改变 t 所代表的实参 t 的值。但此时 t 的指向可以改变,t 所指向的值不能改变。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值