一道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成员函数引用。
我想要的是最完整的答案,各位不辞辛苦了, 展开
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成员函数引用。
我想要的是最完整的答案,各位不辞辛苦了, 展开
展开全部
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的使用说明吧。
声明中加入了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的使用说明吧。
展开全部
1中不能用int类型返回地址;const规定函数不能是输出值发生改变,3中是赋值语句!4中 const修饰了函数则表明了此函数为常成员函数,常成员函数不能调用该类中没有用const修饰的成员函数,把const去掉就可以运行了!此选择题主要就是考关于const的使用,若有不明白的可以找书查一查!希望能对你有所帮助!~~~~~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1中不能用int型返回地址;
3中是赋值语句;
4中问题仍然出现const的引用上,去掉就行。
3中是赋值语句;
4中问题仍然出现const的引用上,去掉就行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
const函数不能赋值。
说明友元,
友元的方法应该在类外实现,。
说明友元,
友元的方法应该在类外实现,。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
const函数不能改变函数内变量的值,3就是一个改变值的过程,所以错误
friend 函数不是在类内定义的
friend 函数不是在类内定义的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询