C++学习笔记:常对象

常对象数据成员

只能通过构造函数的参数初始化表对常数据成员进行初始化,任何其他函数都不能对常数据成员赋值。
如:

const int hour;

下面用法是非法的:

Time::Time(int h)
{
	hour=h;
}

因为常数据成员是不能被赋值的。

常成员函数

如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们。
列如:

void get_time()const;

声明常成员函数的一般形式为:

类型名 函数名(参数列表)const;

const是函数类型的一部分,在声明和定义函数时都要有关键字const,在调用时不必加const。

怎么样利用常成员函数呢?
数据成员非const的普通成员const成员函数
非const的普通数据成员可以引用,也可以改变值可以引用,但不可以改变值
const数据成员可以引用,但不可以改变值可以引用,但不可以改变值
const对象不允许可以引用,但不可以改变值

常成员函数不能调用另一个非const成员函数。

指向对象的常指针

将指针变量声明为 const 型,这样指针变量始终保持为初值不变,不能改变,即其指向不变。
如:

Time*const ptr1=&t1;//类名*const 指针变量名=&所指向对象名;

可以改变指向对象的值但不能改变本身的地址。

指向常对象的指针变量

如果一个变量已被声明为常变量,只能用指向常变量的指针变量指向它。

const char *ptr;//const 类型名 * 指针变量名

可以改变指针指向但不能改变所指向对象的值。

用指针变量作形参和实参的对应关系
形 参实 参合法否改变指针所指向的变量的值
指向非const型变量的指针非const变量的地址合法可以
指向非const型变量的指针const变量的地址非法/
指向const型变量的指针const变量的地址合法不可以
指向const型变量的指针非const变量的地址合法不可以

当希望在调用函数时对象的值不被修改,就应当把形参定义为指向常对象的指针变量,同时用对象的地址作实参(对象可以是 const 或非 const型)。 如果要求该对象不仅在调用函数过程中不被改变,而且要求它在程序执行过程中都不改变,则应把它定义为const型。

对象的常引用

void fun(const Time &t);

不希望再函数中修改实参的值,可以把fun函数的形参声明为const,这样就不能改变实参的值。

const 型数据小结

形式含义
Time const t;t 是常对象,其值在任何情况下都不能改变
viod 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 的值不能改变
注:当成员变量加上mutable后,常对象可以修改其值
mutable int x;

这样的x可以被常函数修改值,常对象也可以修改其值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值