常对象
常成员
之前提到的静态成员可以实现多个类之间数据的共享。但是共享数据不同对象均可访问。
常类型就是为了保证共享,又防止数据被修改
常对象
指对象常量:
const 类名 对象名;
或者 类名 对象名;
常对象的特点:
(1)常对象必须进行初始化,而且不能被更新。数据成员同理
(2)常对象只能调用类中那些不能改变数据成员值的成员函数(即常成员函数),而不能调用类中的其他普通成员函数。
常对象成员
常数据成员:
class 类名
{
……//类中的其他成员
const 类型名 数据成员名
……//类中的其他成员
}
需要用构造函数的初始化表进行初始化:
类名::类名(形参表):常数据成员名1(值1),
常数据成员名2(值2),
{//构造函数的函数体
}
其他成员函数不能对该成员赋值。
常成员函数
class 类名
{
……类中其他成员
类型 函数名 (形参表)const
……类中其他成员
}
特点:只读函数,也不能调用该类中没有const修饰的其他成员函数
2const关键字也是函数类型的一部分,其实现部分中也带const关键字
3const关键字可以区分重载函数
总结
- 常数据成员必须初始化并且不能更新
- 对于常成员函数,下面描述正确的是(B)。
A.类的成员函数可以操作常对象
B.类的成员函数不能操作常对象
C. 只有常成员函数可以操作常对象
D.在常成员函数中,常对象可以被更新
3.定义类的常成员关键字是const
4.常成员函数,定义和声明时必须加const关键字,调用时不必加
5.类的成员函数不能对常数据进行复制操作,一般均要构造函数通过舒适化列表进行初始化赋值 6。常对象中的数据成员为常量,且定义对象时必须初始化
1、常对象一定要初始化,永不能修对象的数据成员,常对象只能调用常成员函数(在调用的常成员函数中不能调用普通成员函数)
网上的介绍:
用const修饰的对象叫对象常量,其格式如下:
〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉
2、常成员函数:
用const关键词说明的函数叫常成员函数。其格式如下:
〈类型〉〈函数名〉(〈参数表〉)const;
常成员函数不能访问普通成员函数和常成员变量,但是普通成员函数能够访问常成员函数
(1) const是函数类型的一个组成部分,因此在函数实现部分也要带有const关键字。
(2) 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。
(3) 常对象只能调用它的常成员函数,而不能调用其他成员函数。成员函数与对象之间的操作关系如表所示。
成员函数与对象之间的操作关系
常成员函数
一般成员函数
常对象
可以
不可以
一般对象
可以
可以
(4) const关键字可以用于参与重载函数的区分。例如:
void Print();
void Print() const;
这两个函数可以用于重载。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。
常成员变量:只能在构造函数的初始化列表初始化;
如:
const int a;
const int b;
int c;
stu::stu(int a,int b,int c) :a(a),b(b),c©{}
或者:stu::stu(int a,int b,int c):a(a),b(b) {
this->c = c;
}
下面是错误的赋值方法:
stu::stu(int a,int b,int c) {
this->a=a;
this->b = b;
this->c = c;
}