C++中,不是常对象能调用常成员函数吗?

那如果是下面这种类型:#include"iostream.h"classA{public:voidprint(){cout<<"aa"<<endl;}voidprint(... 那如果是下面这种类型:
#include "iostream.h"
class A
{public:
void print(){cout<<"aa"<<endl;}
void print()const{cout<<"bb"<<endl;}
};
void main()
{ A a;
a.print() const;
}
我想调用常成员函数,可是系统提示出错,哪儿错了?
展开
 我来答
生活达人快乐冲冲冲
推荐于2016-05-10 · TA获得超过1.4万个赞
知道大有可为答主
回答量:3189
采纳率:90%
帮助的人:464万
展开全部
C++中,不是常对象也可以调用常成员函数。

(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 。
liujun_7177
推荐于2018-03-20 · TA获得超过649个赞
知道小有建树答主
回答量:459
采纳率:0%
帮助的人:637万
展开全部
当然能了.
别把const与static搞混了

有两处错了: 一是调用处,不能a.print() const;只能a.print();
第二个错误是你理解错了, void print()和void print()const是两个有点特殊的重载函数,因为调用都是a.print(),倒底调用哪个呢?看对象来, 若是常对象就调用void print()const, 否则就调用void print().

重释答案: 不是常对象也能调用常成员函数, 但若常成员函数是重载的,那就只有常对象才能调用.比如你的例子.
A a;
a.print();//输出aa
const A a;
a.print();//输出bb
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式