标题:【解剖麻雀】通过一道小型课题解答一些常见问题
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你可以先不理会理论,运行了看效果,然后尝试修改。

授人以渔,不授人以鱼。
2015-01-03 10:00
龙牙
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大汉
等 级:贵宾
威 望:17
帖 子:769
专家分:6207
注 册:2013-3-18
得分:0 
学习,借鉴

只要心是晴朗的,人生就没有雨天。
2015-01-04 13:55
张晓鹏丶
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-1-4
得分:0 
关于文件的目前自己还没有学习到不是很懂,但其他部分真的不错,讲的很细致并且有一种潜在良好习惯养成
2015-01-05 00:21
洛克菲勒
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-1-5
得分:0 
求完整代码,在拉到VS上面实现的过程中遇到了几个头文件显示无效的情况,大神教教怎么破?
2015-01-05 20:02
洛克菲勒
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-1-5
得分:0 
就是头文件放在了其他地方怎么在主程序中调用
2015-01-05 20:07
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
得分:0 
版主讲得真仔细,强力赞一个!

梦想拥有一台龙芯3A-4000
2015-01-05 23:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是引用洛克菲勒在2015-1-5 20:02:54的发言:

求完整代码,在拉到VS上面实现的过程中遇到了几个头文件显示无效的情况,大神教教怎么破?

这里我没放全部代码,当然缺少一些东西。待会我上传整个项目文件吧。

授人以渔,不授人以鱼。
2015-01-06 09:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
下面介绍一下多文件项目的编制。

在我这个程序中,使用了多个文件,包括头文件(.h)和源代码文件(.cpp),首先看看项目怎么建立,见下图:


从图中可见,有两个部分:一是“头文件”,里面有3个.h文件,我们可以自己写,也可以引入现有的文件,操作方法是在“头文件”处点鼠标右键,选【添加】,按提示做;二是“源文件”部分,操作与前相似。

这两部分的作用是不一样的。.h文件,就是我们平常#include的东西,它是一份《目录》,告诉我们对应的源文件都可以使用哪些类型、数据和函数,只是一份清单,没有具体实现代码的;.cpp文件,才是具体实现功能的代码文件,它包含.h中列出的函数实现函数,也包含没有列出的类型、数据和函数,没有在.h中列出的东西,都是这个.cpp文件自己才可见的(这就是所谓的静态数据、静态函数),相当于独立隐藏的东西(在我的这个项目中,就有这样的东西)。

项目这样构建之后,其实还存在一个问题,就是如果某些.h或.cpp不在项目当前的目录中,怎么让编译器找它们?方法是这样,在项目的“属性”菜单中设置,见下图:

在这里选中的位置,点下拉框,编辑,新建,指定文件所在的文件夹。这个操作,实际上就是向系统搜索路径(PATH)添加了一条路径,编译器在搜索文件时,如果当前目录中找不到需要的文件,就会到这些列出的文件夹中找(你指定有多少条路径,就找多少个文件夹),实在找不到,才会报错。设定这个之后,就可以Build项目了。这个东西,在命令行环境中,就是下面的指令:
SET PATH=%PATH%;D:\MyTools1;D:\MyTools2
这个命令,在现有的文件搜索路径(%PATH%))添加2个目录,D:\MyTools1和D:\MyTools2。

下面是这个项目的完整压缩包:
学生成绩管理.zip (402.54 KB)



[ 本帖最后由 TonyDeng 于 2015-1-6 09:50 编辑 ]

授人以渔,不授人以鱼。
2015-01-06 09:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
现在回头看14楼:Student.cpp中,有几个函数,如AverageScore()、CopyStudent()、SwapStudent(),都是在头文件Student.h中没有列出的,那么当你试图在别的.cpp模块如main.cpp中使用这些函数时,就会编译出错,报告没有这样的函数,如下图:

Student.cpp中的数据结构SexItem类型,也是这般,别的模块用不到,只有在这个模块内部可用。

这就是C语言模仿C++类封装的办法!那些函数和数据类型,相当于C++ class中的private部分,只有列出在.h中的,才是public的。这也是C/C++划分.h的作用。

授人以渔,不授人以鱼。
2015-01-06 11:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
现在我把项目修改一下,封闭了某些源代码的开放,改用静态库提供链接,即只让你看到.h头文件,但看不到它是如何实现的.cpp。换句话说,我以后不会再公开某些工具是如何实现的了,但你可以用。

学生成绩管理.zip (594.94 KB)



这个版本的程序新加了一个库MyConsole,可以看到这次运行程序的cmd窗口有了颜色,并且窗口的尺寸增大了(40行128列的),窗口的标题栏文字也是定制的。效果图如下:


往后,将在这个基础上做出用户友好的界面,是传统TC/BC的显示方式,即“直接写屏”的模式,显示文字和信息,光标是不用动的,显示速度飞快。


[ 本帖最后由 TonyDeng 于 2015-1-6 16:09 编辑 ]

授人以渔,不授人以鱼。
2015-01-06 15:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-440457-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.353667 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved