困惑了很久的菜鸟问题,请高手近来帮忙解答

ntxs 2003-05-22 12:29:39
在编写程序过程中,特别是模版类的定义里,常常看到const和& ,常量和引用。
当然,书上有解释,但太不清晰了。
以下就是我写的类,类声明是书上的,实现是自己写的:
http://expert.csdn.net/Expert/topic/1815/1815008.xml?temp=.8148157

对于其中的const和引用 模模糊糊的。请高手们帮我详细解答一下为什么要用到这些和用这些带来的好处好吗?
1。Node(const T& item, Node<T> *ptrnet=NULL);
为什么这里的item要用到引用和const?

2。Node<T> *NextNode(void) const;
为什么这里要定义成常成员函数?

3。LinkedList(const LinkedList<T> &L)
这就更不明白了。常对象的引用L???

4。T& Date(void)
这个函数其实只是为了返回一个公有数据成员date。但为什么这里要定义成返回引用?

上面的个那个连接也是我提的问题。出问题的关键就在于我对const和引用的不懂。请高手帮我!谢谢大家。
...全文
52 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
UMAT 2003-05-22
  • 打赏
  • 举报
回复
greening(逆风寒翎)
讲得很好很详细,我这只菜鸟也收益非浅!谢谢!
ybluo 2003-05-22
  • 打赏
  • 举报
回复
c++ primer 和它的题解 讲得很清楚。
justaseeker 2003-05-22
  • 打赏
  • 举报
回复
greening(逆风寒翎) :
you are right
caton2 2003-05-22
  • 打赏
  • 举报
回复
greening(逆风寒翎) 说的很清楚了
同意
yyfzy 2003-05-22
  • 打赏
  • 举报
回复
greening(逆风寒翎) 说的很清楚了

偶也听听
Caoyu015 2003-05-22
  • 打赏
  • 举报
回复
好处真的是大大的有呀。你仔细的看看C++STL中的很多实现也能感觉到呀。
greening 2003-05-22
  • 打赏
  • 举报
回复
1。用到引用的原因。C++参数传递的缺省是按值传递(pass-by-value),但是如果传入的值会在函数中有修改,则传值方式就无法做到。因为函数处理的是它的拷贝。在1和3中用到引用的原因就是如此。基于以上原因,使用了引用。当参数是引用时,函数接受到的是实参的左值(地址)而不是拷贝,这样对参数的修改才是有效的。
2。使用const的原因。传递参数时,如果传入的是大型的类对象,则传值方式开销太大,因此可以改用引用方式(按地址传递)。而使用const则表示你不希望你传入的参数被修改。所以当你传入的参数是:(1)大型类对象(2)不想被修改 时,const+引用就成了理所当然的组合。这就是1和3既用到const,又用到引用的原因。
3。定义const成员函数的原因。将成员函数定义成const,是因为它是一个不会修改数据成员的函数。为了避免不慎将数据成员作修改,或者调用了其他非const成员函数,所以才加上const的。在2中之所以要加上const,就是为了避免对输入参数进行修改。如果你在函数内部修改了任何参数,编译器是通不过的。所以,这也是一种保护机制。
4。返回值定义成const引用。缺省情况下,返回值类型依然是按值传递(pass-by-value),这就是说得到这个返回值的控制函数得到的只是返回表达式的拷贝,因此你无法对他进行修改。而使用引用返回类型依然是基于以上两个原因:效率和可以修改(上面已经说明过)。这里说明一下使用引用而不使用指针的原因,两个字:方便。就你的例子4来说,Date()函数返回值如果要进行经过重载后的运算符的操作(比如说是“+”),使用指针是极不方便的。比如Date返回了两个引用a和b,那么可以a+b,但是如果Date返回的是两个指针,你可以怎么做?你只能&a+&b,方便吗?如果还有c,那使用&a+&b+&c就不是方不方便的问题了,因为这是错的。正确的写法是&(&a+&b)+&c,方便吗?(这个例子是书上的)所以有人说,引用是为运算符重载而发明的。

70,036

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧