我知道我的代码水平有问题。。。。

2013-12-24 14:09:05 +08:00
 vvniu
以上两个是今早我写的一个c++一次小小小小的作业。。。就是用c++写一个电话本,要求可以插入删除搜索写入文件,最开始从文件读取

之前的版本(http://pan.baidu.com/s/1pJ8Ux55)各种bug。。。。。
被大神a喷过之后,大神b帮我指出了telBook.cpp 里 addTel函数和getFromFile函数里的问题,分别改了tmp = new telNode; tmp = new telNode; 和 !fin.good()这三个地方(对比下就课看出),然后我又想起了大神a的教诲把代码重新修正了一下就成了现在的版本(http://pan.baidu.com/s/1kTnxPjx)。。。。。

代码据说不堪入目。。。。。被建议重头学起。。。。

然后。。。希望能帮我看代码的人。。。说说我这种情况怎么个重头学起法(就是毛病出在哪。。)
6566 次点击
所在节点    程序员
44 条回复
cassyfar
2013-12-24 22:40:34 +08:00
我在想这么OOD写是LZ设计的还是老师要求的

@slixurd 提出的都是常识吧 只要能理解对应的知识点之后就应该知道 LZ确实再重头自学下比较扎实
Golevka
2013-12-24 23:55:35 +08:00
刚刚看了下代码,感觉最大的问题是UI和处理逻辑被混杂在一起,并且UI相关的部分散落在main和class telBook的各个角落。似乎作者没有考虑清楚类里面应该做什么/不应该做什么。
vvniu
2013-12-25 00:14:45 +08:00
@cassyfar 主要就是写的程序别人老说我太面向对象了(之前学的c),然后就刻意这样写的,但是有老觉得框架搭不好。。。。正如 @Golevka 所言

@Golevka 那怎么个分法比较好呢?再单独写一个ui的头文件?
ferson
2013-12-25 00:53:25 +08:00
我就说嘛,为什么不用std::list或写一个List<>,还用C那样手动写链表,原来楼主用C的方法写C++
cassyfar
2013-12-25 03:09:39 +08:00
@vvniu 你应该指的是之前用的面向过程吧 这两种都只是个编程思路 要看实际问题才能确定到底用哪个 不能说为了面向对象而面向对象 你这个程序就是没有必要用到 要keep it simple stupid
建议LZ找本书熟读下吧 另外我觉得cpp很多语法糖 初学用C 练练数据结构什么也挺好的
qiukun
2013-12-25 08:17:53 +08:00
还没人说读代码呢。。
felix021
2013-12-25 08:57:57 +08:00
@vvniu 如果不想实践的话就趁早改行为妙。
Hyperion
2013-12-25 08:59:06 +08:00
挺好的... 大多数学校教C++程序设计的方法, 基本都是惨不忍睹的... 管你用C还是用C++, 跑的起来+够炫, 就是高分... 起码思想都在了. 买本C++ Primer最新版的看看, 然后找点开源看看应该怎么写, 基本就差不多了.

如果不打算靠这玩意吃饭, 还是不要踏进这个门槛了. C能搞定就非常赞了...

自爆黑历史, 请勿吐槽, 我自己都看不下去. 各种风格混杂的写法, 这才是真的惨不忍睹.(其实看起来更像原始向的javascript) 主题是几个里面选其一, 原本还想补个GUI, 但想想太浪费...
http://share.weiyun.com/d517050cbd46cc677d796de745fe6ca2
felix021
2013-12-25 08:59:35 +08:00
@ferson 对于初学者来说 自己写一个比用stl要有益的多。
suckli
2013-12-25 09:08:33 +08:00
建议楼主把代码放到github上
同时也很敬佩楼主,敢于把自己的代码发出来让大家挑毛病
这需要很大的勇气
sxd
2013-12-25 09:16:07 +08:00
@Narcissu5 你在哪 我过来让你看一下我
suckli
2013-12-25 09:17:12 +08:00
提几点风格上的建议
1、代码里混用了空格和tab,这样十分不好
2、不需要的代码就删掉,不要注释了就放在那里不删
3、if后面即使只有一行,最好也带括号括起来
4、return后面竟然还有语句......
5、new 失败了是会抛异常的,判断非空是没用的;另外,即使失败了也不应该直接调用exit~
luoyou1014
2013-12-25 09:38:06 +08:00
@Narcissu5
@vvniu

那篇文章里面解释了, 说不宜进入的技术点不是说这些技术点薪水不高, 而是投入与产出比低, 例如as, 从adobe放弃移动端的flash转而支持HTML5, 说明as会越来越没落, 不过因为做as的人少, 所以as人的薪水也会更高, 但是也要堤防公司换技术方案. C++同理, 至于线程, 是说多线程有了更好的替代方案, 以后线程的应用可能会越来越少
Golevka
2013-12-25 10:36:51 +08:00
@vvniu 举个简单的例子, 比如说add时的prompt是在main里面做的, 而delete的prompt却又做在telBook里面了. 一般地, 像prompt, 控制台输出之类的东西最好放在telBook外面, 否则你若是想在别的地方用telBook, 却发现自己被里面捆绑的UI逻辑给绑架了那就不好了.

大方向就是这样, 细节上的问题就更多了(还有一个非常严重的非风格问题: new和free配对的问题居然没人吐槽...). 另外楼主似乎不知道如何写链表, 其实在一开始就分配一个头结点以后能省去好多事情.
slixurd
2013-12-25 11:15:44 +08:00
其实= =,这是大一的C++大作业啊,和我们的大作业题目也一模一样
那些说用STL的为什么不想想这种入门级作业怎么能用STL写,这就是为了练手,熟悉语言,熟悉基本数据结构才开的大作业,否则这种东西为什么不用数据库?数据库写这个难道不是天经地义的东西么

而且感觉略多人都站在了很高的角度上,这种程序真不需要MVC分离,也不太需要一个优秀的设计模式,总不会这样一个小程序还用FACADE指派任务或者拿个简单工厂来转移任务降低耦合么?

这种代码就应该好好用基本的CLASS/STRUCT慢慢写,想要写的好的话可以考虑如何在这样一个简单的东西里做出一个不那么简单的东西,例如:
1.随机存储,你现在的顺序读取无法随机存储,那么当你有一百万条记录的时候你还这样一条一条读?不怕内存爆掉?
2.通讯录分组,为什么不加字段做通讯录分组?即使不考虑那么大规模,你一样可以顺序读取,然后建立一颗根据分组来做分支的树加快查找速度(速度是可以用数据看到的
3.通讯录更多的信息,你这个通讯录就那么几个字段,可以考虑更多的字段,更复杂的逻辑
4.导出符合规格的VCR文件,或者参考VCR格式来修正

想写的好就多写多看,买本C++ Primer,看看别人的源代码...千万不要有人说产出比低就不看了,能做的多好就做的多好,不然以后你会后悔的...
Narcissu5
2013-12-25 12:37:56 +08:00
@luoyou1014 这说法放C++身上成立,放AS身上就不成立!实际上由于我大天朝奇葩的页游产业和居高不下的低版本IE使用率,flash很可能在很长一段时间内压制html5。现在的AS基本上是供方市场,产出投入比极高。
ferson
2013-12-25 12:44:17 +08:00
当年我也做电话本这种入门作业,一开始我也跟楼主一样写得比较杂乱,不管是用STL还是自己实现所有的东西,或是用更高级的数据库什么的,以及怎么把class设计得好,再到用什么什么模式,我个人是一步一步地全都尝试过,就当是学习。
所以这种入门级的作业,如果说为了完成作业的话那功能完善没有bug就ok了,而如果你想要做得更好的话,一个小小的电话本就可以越写越有意思——然后程序就会越来越臃肿,然后就考虑到重构,然后就学会了如何精简程序,这样一步一步走来。
可能每个人的步骤不一样,关注的细节也不一样,但相同的是,要有探索和尝试的想法,然后总结经验。
当然,几本大部头的书还是要看的
Hyperion
2013-12-25 12:51:15 +08:00
@slixurd 用什么完全不是重点, 重点是思想. 基础的STL看看也就会用了, 使用上完全不是什么障碍, 应该用, 这玩意我觉得才是C++的基础啊. 和C重叠的部分, 重复折腾一点意思都没有.
luoyou1014
2013-12-25 14:46:07 +08:00
@Narcissu5
所以这两年as已经到顶峰了, 也无法发展, 剩下的就是衰落, 尤其是ie6已经降到了10%的情况下, 精通一门技术至少两年的时候, 两年的时候足够as衰落了
bombless
2013-12-25 15:15:16 +08:00
楼主,你现在就在提高啊……不用惊慌,多读多写就好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/94387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX