内容简介:用const修饰的对象叫对象常量,常对象实例化后将不能被改变,而且常对象也不能调用其它成员函数,那么它有什么用呢?办法是,C++编译器故意设计成,常对象只能调用常成员函数,这是它唯一的对外接口。
1.常对象
用const修饰的对象叫对象常量,其格式如下:
〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉
声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。
例:分析下列错误的地方,说明理由;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include class Point { int x, y; public: Point(int a, int b) { x=a; y=b;} Void MovePoint( int a, int b){ x+=a; y+=b;} Void print(){ cout<<"x="< }; void main( ) { const Point point1( 10,10);//常量对象 point1.MovePoint(2,2);//常对象point1的数据不能被更改,所以错误 point1.print( );//print函数的this指针不能指向常对象 } |
错误原因在旁边已经注释。
常对象常被用在对象的引用上。所谓常引用是指说明引用时用const修饰。常引用所引用的对象不能被更新,一般用做形参。其格式:
const 〈类型说明〉&〈引用名〉
例:根据例题5-11的类给出程序的执行结果:
1 2 3 4 5 6 7 8 9 10 11 |
#include int length(const Point &p1, const Point &p2) { int l; l=sqrt((p1.x -p2.x)* (p1.x -p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); return l; } void main( ) { Point a(1,1),b(4,5); Cout<<"两点的距离是:"< } |
本程序的输出:
两点的距离是:5
2.const修饰对象:
常对象实例化后将不能被改变,而且常对象也不能调用其它成员函数,那么它有什么用呢?办法是,C++编译器故意设计成,常对象只能调用常成员函数,这是它唯一的对外接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include class A {public: A(int p,int q){x=p,y=q;} ~A(){} void display(); void display() const;//函数重载const private: int x,y; }; void A::display() {cout< void A::display() const {cout< void main() {A l(2,3); l.display(); const A f(8,9);//如果将一个对象说明为一个常对象,则通过该对象只能调用他的常成原函数,而不能调用他的其他的成员函数。 f.display(); } //const是函数类型的一部分,因此再函数的定义部分也要带const。 //常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。 |
2.常成员函数
用const关键词说明的函数叫常成员函数。其格式如下:
〈类型〉〈函数名〉(〈参数表〉)const;
常成员函数的作用和功能:
常成员函数不能更新对象的数据,也不能调用非const修饰的成员函数。常对象只能调用类的常成员函数。
例:给出下列程序的执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include class Point { int x, y; public: Point(int a, int b) { x=a; y=b;} Void MovePoint( int a, int b){ x+=a; y+=b;} Void print()const { cout<<"x="< }; void main( ) { Point point1(1,1); const Point point2( 2,2);//常量对象 point1.print();//普通对象可以调用常成员函数 point2.print( );//常对象调用常成员函数 } |
本程序执行结果:
x=1 y=1
x=2 y=2
使用const关键字说明的成员函数称为常成员函数,常成员函数的说明格式如下:
<返回类型说明符> <成员函数名>(<参数表>) const;
在使用常成员函数时要注意:
(1) const是函数类型的一个组成部分,因此在函数实现部分也要带有const关键字。
(2) 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。
(3) 常对象只能调用它的常成员函数,而不能调用其他成员函数。成员函数与对象之间的操作关系如表所示。
成员函数与对象之间的操作关系
(4) const关键字可以用于参与重载函数的区分。例如:
1 2 |
void Print(); void Print() const; |
这两个函数可以用于重载。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。
(5)在const成员函数中:
可以修改被定义成mutable的成员变量
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 对象.原型链,函数.原型对象
- 《JavaScript面向对象精要》之四:构造函数和原型对象
- 《JavaScript面向对象精要》之二:函数
- ndarray可迭代对象,函数,运算
- python面向对象-1方法、构造函数
- C++ 函数可以直接返回一个对象吗?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
架构即未来:现代企业可扩展的Web架构、流程和组织(原书第2版)
Martin L. Abbott、Michael T. Fisher / 陈斌 / 机械工业出版社 / 2016-4-15 / 99.00
任何一个持续成长的公司最终都需要解决系统、组织和流程的扩展性问题。本书汇聚了作者从eBay、VISA、Salesforce.com到Apple超过30年的丰富经验, 全面阐释了经过验证的信息技术扩展方法,对所需要掌握的产品和服务的平滑扩展做了详尽的论述,并在第1版的基础上更新了扩展的策略、技术和案例。 针对技术和非技术的决策者,马丁•阿伯特和迈克尔•费舍尔详尽地介绍了影响扩展性的各个方面,包......一起来看看 《架构即未来:现代企业可扩展的Web架构、流程和组织(原书第2版)》 这本书的介绍吧!