一道C++选择题

由于常对象不能被更新,因此A)通过常对象只能调用它的常成员函数B)通过常对象只能调用静态成员函数C)常对象的成员都是常成员D)通过常对象可以调用任何不改变对象值的成员函数... 由于常对象不能被更新,因此
A)通过常对象只能调用它的常成员函数
B)通过常对象只能调用静态成员函数
C)常对象的成员都是常成员
D)通过常对象可以调用任何不改变对象值的成员函数
为什么选A不选D?D怎么错了?
能举例子说明吗? 就是举出简单的程序例子来说明
展开
 我来答
hlx7kj9m77
2011-07-14 · TA获得超过352个赞
知道答主
回答量:46
采纳率:0%
帮助的人:46.2万
展开全部
A.常对象为了保证数据不被修改,只能调用在编写是就定义为常成员函数的函数
这是牺牲效率来保证安全的典型情况。
D.就是A的反例啦。为了保证程序的安全,这是编译就进行的检查。
常对象就只能调用它的常成员函数。
一定要说为什么,C++的安全机制在我看来是没有什么动态保证的,所以要用编译时就保证安全。
而且常成员函数不能调非常成员函数。
追问
能举例子说明吗? 就是举出简单的程序例子来说明
追答
隐式调用的构造函数和析构函数例外;

const Time t1(10,15,36); //定义常对象t1,并构造赋初值;
t1.get_time(); //get_time()分两种情况讨论;

定义get_time()时
1.若定义:
void get_time()
{
……(内容省略)……
}
则这不是常函数,不可调用;
2.若定义:
void get_time() const
{
……(内容省略)……
}
则这是常函数,不可调用;
const是函数类型的一部分,定义声明的时候都要有;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wggood1
2011-07-14 · TA获得超过102个赞
知道答主
回答量:84
采纳率:66%
帮助的人:48.9万
展开全部
常对象不能调用非常成员函数,比如那些get类型的成员函数就不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ydlqw
2011-07-14 · 超过29用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:90.7万
展开全部
常对象只能被调用而不能被修改,A正确
改变常对象值的成员函数,首先在编译是就不会通过,所以不存在这样的函数,D因此错了
追问
能举例子说明吗? 就是举出简单的程序例子来说明
追答
对不起,我刚才对D的理解有误,常对象可以调用不改变对象值的成员函数,但该成员函数必须是常成员函数,所以D错了。
以下是例子,当getVal()定义为常成员函数时,testGetIt()可以正常调用,而去掉const,getVal()成为一般的成员函数时,编译不能通过。
class Test {
int val;
public:
Test() {}
int getVal() const {
return this->val;
}

int testGetIt() const {
return getVal();
}

};
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式