const常类型说明
const : 不能修改
[CODE_LITE]
const常类型说明
* 分类
常变量: const 类型说明符 变量名
常引用: const 类型说明符 &引用名
常对象: 类名 const 对象名
常成员函数: 类名::fun(形参) const
常数组: 类型说明符 const 数组名[大小]
常指针: const 类型说明符* 指针名 ,类型说明符* const 指针名
* 实例说明
const 类型说明符 &引用名 :
#include
void display(const double& r)
{
// r=12.0;//错的
cout<
class R
{
public:
R(int r1,int r2)
{R1=r1;R2=r2;}
void print();
void print() const;
private:
int R1,R2;
};
void R::print()
{ cout<const<对象名> 或 const<类名><对象名> 两者无区别
* 常指针:
o
+ int * const r=&n (r是常量指针,不允许改变,所以:r=m是错误的,*r=1是允许的。)
+ const int *r=&n (*r是常量,不允许改变,所以:r=m是允许的,*r=1是错误的。)
* 常引用:
const <类名>&<引用名>
* 常成员函数:只有常成员函数才能操作常量或常对象。
<类型><函数名>(<参数表>) const
* 常数据成员:只能使用成员初始化列表的方式生成构造函数来对数据成员进行初始化
###########################################################################################
常对象和常函数的关系 const
http://blog.sina.com.cn/s/blog_4ac0a0d30100cmz5.html
(1) 常对象
用const修饰的对象叫对象常量,其格式如下:
〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉
声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。
例:分析下列错误的地方,说明理由;
#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="<
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<<"两点的距离是:"<
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="< <成员函数名>(<参数表>) const;
在使用常成员函数时要注意:
(1) const是函数类型的一个组成部分,因此在函数实现部分也要带有const关键字。
(2) 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。
(3) 常对象只能调用它的常成员函数,而不能调用其他成员函数。成员函数与对象之间的操作关系如表12-1所示。
常对象和常函数的关系 const
来源:(http://blog.sina.com.cn/s/blog_4ac0a0d30100cmz5.html) - 常对象和常函数的关系 const_天涯霜雪_新浪博客
(4) const关键字可以用于参与重载函数的区分。例如:
void Print();
void Print() const;
这两个函数可以用于重载。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。
(5)在const成员函数中:
可以修改被定义成mutable的成员变量,使用mutable关键字定义的成员变量可以被const成员函数修改!
保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。并且在所有使用该成员函数的地方都可以更准确的预测到使用该成员函数的带来的影响。而mutable则是为了能突破const的封锁线,让类的一些次要的或者是辅助性的成员变量随时可以被更改。没有使用const和mutable关键字当然没有错,const和mutable关键字只是给了建模工具更多的设计约束和设计灵活性,而且程序员也可以把更多的逻辑检查问题交给编译器和建模工具去做,从而减轻程序员的负担(yayv觉得这只不过是把负担移交给了设计人员~, :(,并没有降低任何工作量 )。如果开发过程有比较严格的迭代过程,使用这两个关键字应该更能体现出他们的作用。
[/CODE_LITE]
来源:http://my.oschina.net/alphajay/blog/5749