分享

常对象与常成员函数的关系

 牛人的尾巴 2017-01-09

对象与常成员函数的关系

(1) 常对象

用const修饰的对象叫对象常量,其格式如下:

〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉

声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。 

例:分析下列错误的地方,说明理由;

#include<iostream.h>

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="<<x<<"y="<<y<<endl;}

};

void main( )

{

const Point point1( 10,10);//常量对象

point1.MovePoint(2,2);//常对象point1的数据不能被更改,所以错误

point1.print( );//print函数的this指针不能指向常对象

}

错误原因在旁边已经注释。

常对象常被用在对象的引用上。所谓常引用是指说明引用时用const修饰。常引用所引用的对象不能被更新,一般用做形参。其格式:

const 〈类型说明〉&〈引用名〉

例:根据例题5-11的类给出程序的执行结果:

#include<math.h>

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<<"两点的距离是:"<<length( a, b)<<endl;

}

本程序的输出:

两点的距离是:5

(2)常成员函数

用const关键词说明的函数叫常成员函数。其格式如下:

〈类型〉〈函数名〉(〈参数表〉)const;

常成员函数的作用和功能:

常成员函数不能更新对象的数据,也不能调用非const修饰的成员函数。常对象只能调用类的常成员函数以及类的静态成员函数。

例:给出下列程序的执行结果:

#include<iostream.h>

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="<<x<<"y="<<y<<endl;}

};

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) 常对象只能调用它的常成员函数,而不能调用其他成员函数。成员函数与对象之间的操作关系如表12-1所示。

     (4) const关键字可以用于参与重载函数的区分。例如:

     void Print();

     void Print() const;

     这两个函数可以用于重载。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。

   (5)在const成员函数中,可以修改被定义成mutable的成员变量.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多