内容简介:用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++ 函数可以直接返回一个对象吗?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Learning JavaScript
Shelley Powers / Oreilly & Associates Inc / 2006-10-17 / $29.99
As web browsers have become more capable and standards compliant, JavaScript has grown in prominence. JavaScript lets designers add sparkle and life to web pages, while more complex JavaScript has led......一起来看看 《Learning JavaScript》 这本书的介绍吧!