LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2179|回复: 20

问一个C++语法问题

[复制链接]
发表于 2004-11-26 13:22:33 | 显示全部楼层 |阅读模式
殷人昆《数据结构》151页。

广义表结点类的访问成员函数的实现。

  1. GenListNode &GenListNode::Info(GenListNode * elem){
  2.     GenListNode * pitem = new GenListNode;
  3.     pitem->utype = elem->utype;
  4.     pitem->value = elem->value;
  5.     return * pitem;
  6. }
复制代码


其中,utype是标志域,用来标明该结点是什么类型的结点,utype=0,是广义表专用的表头结点;utype=1,是整型数原子结点,utype=3,是子表结点。
value是值域。

我的问题。

1.这个函数定义返回的是一个对象的引用,我可不可以把这个对象赋给一个GenListNode类型的变量或 GenListNode * 类型的变量。
2.在这个取结点信息的函数中,使用了new算符,我该如何将new得到的内存空间delete掉。
3.函数定义的时候可不可以不加那个'&'
(GenListNode并没有重载'='算符。)

请不要修改函数定义。让函数返回指针我是会的。
我想知道返回对象引用的函数如何使用。
发表于 2004-11-26 14:00:50 | 显示全部楼层
这个问题太深奥。我记得广域表是在数据结构的最后了,这本书怎么
在一百多页就学它了后面还讲啥?这书牛吗?
 楼主| 发表于 2004-11-26 16:06:01 | 显示全部楼层
我问的不是数据结构问题,只是一个C++的语法问题。
 楼主| 发表于 2004-11-26 16:25:03 | 显示全部楼层
最初由 diver123 发表
这个问题太深奥。我记得广域表是在数据结构的最后了,这本书怎么
在一百多页就学它了后面还讲啥?这书牛吗?


我个人的观点啊,这本书的内容很好,思想也很好,如果全学明白了数据结构就无敌。

但问题是:这本书很不适合学习,C++的语法太令人困扰,就易学程度来说,这本书实在是太烂了,跟严蔚敏的C语言版相比。

同样的问题,我看这本书几个小时都看不懂,看严版的教材,五分钟就明白。

广义表其实不难。
发表于 2004-11-26 16:25:19 | 显示全部楼层
殷老师的书上代码有很多是错误的
最好自己都调试一下
以前我们学的时候,每个年级都自己写过一份修改的
发表于 2004-11-26 16:37:38 | 显示全部楼层
很久没碰C++了,仅供参考

1.既然是对象的引用,可以把这个对象赋给一个GenListNode类型的变量,具体后果看GenListNode类的copy constructor 或 assignment operator.
对于GenListNode * pNode, 则应该是pNode= &该对象的引用。直接用指针指过去
就是了,可以不需拷贝构造函数或重载'='

2.free空间可以在析构函数内完成。如果你不干,交给垃圾收集器;如果没有垃圾收集器,结果未定义。

3.之所以用对象引用的方式返回,估计是防止copy constructor 或 assignment operator 未定义的情况下带来麻烦。你知道,两个类之间的拷贝或者赋值是要很小心的事情,尤其是类内部带有指针。所以干脆用对象引用了。
发表于 2004-11-26 16:42:03 | 显示全部楼层
要把数据结构和语法正确与否区分开。

数据结构重在阐述数据类型及其上的操作。不要花太多时间研究语法,那个是外在的。我老师(中科院计算所毕业的一个老博士)说可以用自然语言描述数据结构和算法,只要不引起二义性,然而这很难,所以才用pascal c 等等。所以根本无须顾忌语法正确与否的问题。
发表于 2004-11-26 16:45:19 | 显示全部楼层
最初由 KMnO4 发表
我个人的观点啊,这本书的内容很好,思想也很好,如果全学明白了数据结构就无敌。

但问题是:这本书很不适合学习,C++的语法太令人困扰,就易学程度来说,这本书实在是太烂了,跟严蔚敏的C语言版相比。

同样的问题,我看这本书几个小时都看不懂,看严版的教材,五分钟就明白。

广义表其实不难。

挖,那只能以后考虑了。
发表于 2004-11-26 17:14:56 | 显示全部楼层
资源在哪里申请就应该在那里释放,如果没有垃圾收集器的话。
 楼主| 发表于 2004-11-26 17:27:30 | 显示全部楼层
最初由 neplusultra 发表
很久没碰C++了,仅供参考

1.既然是对象的引用,可以把这个对象赋给一个GenListNode类型的变量,具体后果看GenListNode类的copy constructor 或 assignment operator.


谢谢。

如果有如下声明:

GenListNode a;

是否已为a分配内存空间了呢?

这样的话,还可以使用 a=b.Info(elem);么?原来a占的内存空间如何处理?

数据结构已经看过好多遍了,正为C++的语法苦恼。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表