一道c++选择题,请指教

有如下类定义,其中的四个函数定义中正确的是()classAA{inta;public:intgetRef()const{return&a;}//1intgetValue(... 有如下类定义,其中的四个函数定义中正确的是()
class AA
{
int a;
public:
int getRef() const {return &a;}//1
int getValue() const {return a;}//2
void set(int n) const { a=n;}//3
friend void show(AA aa) const {cout<<aa.a}//4
}

(A).1 (B).2 (C).3 (D).4
答案选择的是B。 我想请问下 C和D怎么解释。
不好意思,最后friend void show(AA aa) const {cout<<aa.a}//4后面少打了一个封号。 cout<<aa.a;

你们说friend 函数不是在类内定义的 。可是我在人民邮电出版社 出版的 C++ Primer中文版中的第398页中看到这么一段话:
友元声明将已经命名的类或非成员函数引入到外围作用域中。此外,友元函数可以在类的内部定义,该函数的作用域扩展到包围该类定义的作用域。
这里说 友元函数可以在类的内部定义啊,,,,我郁闷啊,求解答。

还有书上说了,常成员函数可以引用const数据成员,也可以引用非const数据成员。const数据成员可以被const成员函数引用,也可以被非const成员函数引用。

我想要的是最完整的答案,各位不辞辛苦了,
展开
 我来答
fallx
2010-06-04 · TA获得超过5485个赞
知道大有可为答主
回答量:2321
采纳率:73%
帮助的人:698万
展开全部
void set(int n) const { a=n;}//3
声明中加入了const 强调这是个“只访问,不能动元素”的函数,它
不能调用它访问类中的私有成员变量的。
还出现a=n这样试图设置类中元素值的语句,编译肯定过不去的。这就是错误了。

friend void show(AA aa) const {cout<<aa.a}//4

这个按道理来说,是可以的,友元函数能访问类中的元素,除非也是出错在const这里喽。不敢肯定。没有调试。可能是因为
cout<<aa.a一句中后面没有分号(;)。

刚编译了一下:
#include<iostream>
using namespace std;
class AA
{
int a;
public:
// int getRef() const {return &a;}//1
int getValue() const {return a;}//2
void set(int n) { a=n;}//3
friend void show(AA aa) {cout<<aa.a;}//4 注意,改了的。少了const才能通过
};

main()
{
AA b;
b.set(8);
show(b);
}
编译结果:
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
D:\temp\友元函数.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
输出结果:
8

所以我猜测是const出了问题,于是再改成如下:
friend const void show(AA aa){cout<<aa.a;} ;//声明中const调了位置
结果也是与上面一样。
不是结论:
可能是const的问题。更深入的请查阅const的使用说明吧。
乐GUAN
2010-06-04 · 超过31用户采纳过TA的回答
知道答主
回答量:105
采纳率:0%
帮助的人:86.5万
展开全部
1中不能用int类型返回地址;const规定函数不能是输出值发生改变,3中是赋值语句!4中 const修饰了函数则表明了此函数为常成员函数,常成员函数不能调用该类中没有用const修饰的成员函数,把const去掉就可以运行了!此选择题主要就是考关于const的使用,若有不明白的可以找书查一查!希望能对你有所帮助!~~~~~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
极品麽麽茶
2010-06-04
知道答主
回答量:24
采纳率:0%
帮助的人:10.9万
展开全部
1中不能用int型返回地址;
3中是赋值语句;
4中问题仍然出现const的引用上,去掉就行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w520tonghua1
2010-06-04 · 超过13用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:36.5万
展开全部
const函数不能赋值。
说明友元,
友元的方法应该在类外实现,。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
777999666qhw
2010-06-04 · TA获得超过4871个赞
知道大有可为答主
回答量:5615
采纳率:25%
帮助的人:4611万
展开全部
const函数不能改变函数内变量的值,3就是一个改变值的过程,所以错误
friend 函数不是在类内定义的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式