VC++60操作简介及编程规范.doc

上传人:asd****56 文档编号:70344593 上传时间:2023-01-19 格式:DOC 页数:22 大小:2.56MB
返回 下载 相关 举报
VC++60操作简介及编程规范.doc_第1页
第1页 / 共22页
VC++60操作简介及编程规范.doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《VC++60操作简介及编程规范.doc》由会员分享,可在线阅读,更多相关《VC++60操作简介及编程规范.doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、VC+6.0操作简介工作区窗口:包含ClassView、FileView、等选项卡,各选项卡中以树形结构形式列出了项目所包含的各种成分。编辑窗口:编辑窗口可以有多个,用来编辑源代码。输出窗口:用来显示编译、调试、等信息。一、 VC+6.0界面VC+6.0界面如下图所示:二、 VC+6.0环境的基本操作1 建立应用程序操作步骤如下:(1) 关闭 当前工作区:【文件】【关闭 工作区】 (必要时)(2) 建立工程:【文件】【新建】(出现“新建”对话框)在“新建”对话框中选中“工程”选项卡选中其中的“Win32 Console Application”项选择存储“位置”输入工程名单击“确定”按钮(出现

2、“Win32 Console Application”对话框)在“Win32 Console Application”对话框中选择“An empty project”选项单击“完成”按钮注意:在操作过程中,如果出现提示性对话框,可根据具体情况按“确定”或“取消”按钮。至此,一个新的工程已经建立,接下来,可以在该工程中建立文件或(和)将已经存在的文件添加到工程中:在工程中新建文件:【工程】【添加工程】【新建】(出现“新建”对话框)/M1.cpp#include void main() cout Hello!n;在“新建”对话框中选中“文件”选项卡选中其中的“C+ Source File”或者“C

3、/C+ Header File”项选择新建的文件所属的工程(添加工程)选择存储位置(目录)输入文件名单击“确定”按钮输入文件内容。例如,新建的名为M1.cpp的源文件内容如下:向工程中添加文件【工程】【添加工程】【Files】(出现“插入文件到工程”对话框)在“插入文件到工程”对话框中选中要插入的文件选择文件要插入的工程(插入到)单击“确定”按钮2 编辑文件操作步骤如下:在“工作区”窗口中选择“FileView”选项卡展开相应工程的文件分支(工程名files)双击类要编辑的文件名(此时,相应文件的内容已经显示在编辑窗口中)对文件进行编辑3 编译、构建与运行应用程序编译源文件:在“工作区”窗口选

4、择“FileView”选项卡选择要编译的源文件【编译】【编译xx】构建可执行文件:设置活动工程(工作区中有多个工程时):【工程】【设置活动工程】【xx (工程名)】【编译】【构建xx.exe】运行应用程序:设置活动工程(工作区中有多个工程时):【工程】【设置活动工程】【xx (工程名)】【编译】【执行xx.exe】4 在工程中新建类(1)新建类:设置活动工程(工作区中有多个工程时需要此步)。【插入】【新建类】(出现“New Class”对话框)在“New Class”对话框中输入类名选择基类(Base class)指定保存文件(必要时,缺省的文件名与类名相同)单击“OK”按钮(2)为新建的类添

5、加成员声明:通过步骤(1)建立的类,VC+自动地给出了类的框架,(构造函数和析构函数的原型声明)和必要的编译指令(例如,下图是新建了TDate类时,TDate.h文件的内容)所以,当建立了一个新类的框架之后,程序员应该为新建的类添加成员。操作步骤如下:在工作区窗口中选择“ClassView”选项卡展开相应工程的类分支(工程名classes)双击类名(此时,保存类声明的头文件内容已经显示在编辑窗口中,如上图)向类中添加成员声明。/class TDate int month,day,year;public:TDate();virtual TDate();void Set(int m=1,int d

6、=1,int y=2000);void Print();例如,我们在TDate类中添加三个数据成员和两个成员函数。完成后的类声明代码如下(加粗的是新增的语句):(3)为新建类的成员函数添加实现代码:向类中添加完成员声明之后,就应该编写成员函数的实现代码了。具体操作步骤如下:在工作区窗口中选择“FileView”选项卡展开相应工程的源文件分支(工程名files Source Files)双击类的实现代码的源文件名(此时,相应源文件内容已经显示在编辑窗口中)/#include TDate:TDate() month=1; day=1; year=2000; TDate:TDate() void T

7、Date:Set(int m,int d,int y) month=m; day=d; year=y; void TDate:Print() cout month / day / year n;编写成员函数的实现代码 例如,我们为TDate类的4个成员函数编写实现代码如下(加粗的是新增的语句):(4)在有关源文件中添加使用类的语句:至此,类的设计工作已经完成。现在,在有关源文件中就可以使用新建的类了。例如,我们要在M1.cpp源文件中使用类TDate,只要在M1.cpp源文件中加入相应的代码即可。#include #include TDate.hvoid main() cout Hello!n

8、; TDate d; d.Print(); d.Set(10,15,2003); d.Print();下面是修改后的M1.cpp源文件内容(加粗的是新增的语句):5 工程中文件的管理在工程中新建文件:(见1.)向工程中添加文件:(见1.)从工程中移出文件:在工作区窗口中选择“FileView”选项卡展开文件分支选中要移出的文件打“Del”键。 C+编程规范2009年5月25日目录1介绍31.1文档目的31.2动机32一般性原则33文件结构43.1一般性问题43.2头文件43.3源文件的结构。63.4目录结构74命名和书写规范74.1标识符的命名规则74.2类74.3函数84.4成员变量104.

9、5指针和引用104.6常量104.7枚举变量114.8全局变量115表达式和基本语句115.1运算符的优先级115.2复合表达式125.3if 语句125.4循环语句的效率145.5for 语句的循环控制变量155.6switch语句156排版156.1空格与对齐156.2注释197内存管理217.1创建与销毁217.2数组与指针211 介绍1.1 文档目的 本文档规定了C+编程过程中的编码规范,本文档的目的是为了帮助本学院的学生,教师更好的完成程序设计任务。所有的程序作者都应该遵循此文档所规定的编码规范。如果你对于文档中规范有不同的见解或更好的解决方案,在确保自己的解决方案经过充分的记录和测

10、试的前提下,请及时通知本文的作者,以便对该文档相应的规则做出必要的更改。1.2 动机 为了对软件的开发进行适当的规范化,特制定本规范,其根本目的,是为了保证程序具有良好的、一致的结构,以期提高程序的可读性及可维护性,方便程序的测试、维护、升级等工作,同时,也培养学生书写代码的规范性。2 一般性原则为了书写出清晰而易维护的代码,以下的一般性原则可以所有的情况下应用到: 重用性。软件工程师的一个目标就是通过重复使用代码来避免编写新的代码。因为重新使用已有的代码可以降低成本、增加代码的可靠性并提高它们的一致性。 可维护性。一段风格良好的代码肯定具有很好的可读性。如果代码的维护者不明白你所书写的代码的

11、含义,那么代码的维护就会成为一件十分困难和耗时的工作,所以在你编辑代码的时候,一定要时刻的考虑到你的代码别人是不是能够真正理解。 模块化,封装和信息隐藏。如果一个模块的代码变的太长或者太复杂,一定要考虑你的模块是不是需要重新组织一下,或者将一个模块分解成多个模块。 不要对使用你代码用户抱有太多的幻想。要让代码保护自己不被错误使用。 书写注释。注释可以帮助别人更好的理解你的代码,尽管这一条经常被软件开发人员忽视,但是对于代码的作者,使用者或者维护人员来说,代码注释在提高代码地可读性和可维护性方面是十分必要的。 保持代码风格的一致性,无论是在文件级别,模块级别,还是工程级别,请保持代码风格的一致性

12、。3 文件结构3.1 一般性问题 禁止用空格和一切的非ASCII字符作为文件名,而且以下字符也是不允许的& + - $ % * ( ) | / ? ; : , 每一个文件名应该反映出你在里面定义或者实现的模块。 所有的目录名,文件名一律用小写字母书写。 一个文件中只能定义或者实现一个类,唯一的例外是小型的帮助类或私有的内部类可以和它的主类定义在同一个文件中。 文件中不允许包含废弃不用的源代码。 3.2 头文件 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。 用#include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 用#includ

13、e “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。 将构造函数和析构函数声明在类的开头位置 将数据成员放在类的末尾 将从父类继承的函数放在不同的位置,并添加注释说明这些成员函数是从哪个类继承而来的 不要将类的内联函数的实现放到头文件中 头文件中只存放“声明”而不存放“定义” 不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。C+头文件的结构/-/ Copyright (c) 2009, Software College of Hebei Normal University/ FILENAME: filename.

14、h / DESCRIPTION: / / AUTHOR:/ DATE:/ Version:/-#ifndefGRAPHICS_H / 防止graphics.h被重复引用#defineGRAPHICS_H#include / 引用标准库的头文件#include “myheader.h” / 引用非标准库的头文件void Function1(); / 全局函数声明class Box / 类结构声明;#endif3.3 源文件的结构。 书写注释,源文件的注释是为这个模块的维护者书写的,源文件的注释应该满足以下条件:a 注释要描述所有类级别的实现,详细描述复杂的和容易产生歧义的实现部分b 成员函数的作

15、用,目的以及返回值和参数都需要添加必要的注释部分 在同一个源文件中写一个类的实现部分 全局函数和成员函数的定义需要保持和头文件中相同的顺序 同函数的参数名要和头文件中保持一致C+源文件的结构/ 版权和版本声明见示例1-1,此处省略。#include “graphics.h” / 引用头文件/ 全局函数的实现体void Function1()/ 类成员函数的实现体void Box:Draw()3.4 目录结构 如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。 如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明”。为了

16、加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。4 命名和书写规范4.1 标识符的命名规则 不允许使用汉语拼音命名,更不要使用汉语,尽量英文来命名标识符,因为计算机语言的保留字都用英文命名,而且在国际化的组织中,英文一般作为主要的沟通语言。 用描述性的文字来命名标识符,如果你不能为一个标识符命名,你一定要考虑这个标识符是否还有存在的必要。 尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。 函数,类,结构的名字开头字母要大写 标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。程序中的英文单词一般不

17、会太复杂,用词应当准确。例如不要把CurrentValue写成NowValue。4.2 类 必须以大写开头,后面字母反映具体含义,例如:TStudent, TPoint前面的T表示一个新“Type”,或者CStudent, CPoint, C表示一个新”Class”;或者直接首字母大写Student, Point;以清晰表达类的用途和功能为原则。 接口类必须以大写I开头,代表 Interface 类的声明顺序严格按照存取描述符public, protected 和private的顺序 尽量的用class声明一个类,而不是struct. 将析构函数声明为虚函数 尽可能的为类提供一个默认构造函数

18、用inline函数代替宏定义 如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能和属性。 若在逻辑上B是A的“一种”(a kind of ),则允许B继承A的功能和属性。例如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。那么类Man可以从类Human派生,类Boy可以从类Man派生。 若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。 采用以函数为中心的版式,将public类型的函数写在前面,而将private类型的数据写在后面,采用这种版式的程序员主张类的设计“以行为为中心”,重点关注的是类应该提供什

19、么样的接口。以数据为中心版式以函数为中心的版式class Aprivate:inti, j;floatx, y; public:void Func1(void);void Func2(void);class Apublic:void Func1(void);void Func2(void);private:inti, j;floatx, y; 4.3 函数 参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。 避免函数有太多的参数,参数个数尽量控制在5个以内。如果参数太多,在使用时容易将参数类型或顺序搞错。 尽量不要使用类型和数目不确定的参数。 函数参数最好以小写a开头(例如:aPar

20、a),表示这个变量是参数(argument)变量,从而使参数和临时变量,成员变量分开 例子:/ testclass.h:/-/ Test class description./-class CTestClasspublic: TInt MemberFunction( TInt aNumber );./ testclass.cpp:./ -/ Implementation description./ -TInt CTetrisClass:MemberFunction( TInt aNumber ) . 如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。 如

21、果输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。 不要省略返回值的类型。 函数名字与返回值类型在语义上不可冲突。 不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。 有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。 在函数体的“入口处”,对参数的有效性进行检查。 在函数体的“出口处”,对return语句的正确性和效率进行检查。4.4 成员变量 用m_开头来命名成员变量,例如: int m_intValue;4.5 指针和引用 应当将修饰符 * 和紧靠

22、变量名示例:char*name;int *x, y;/ 此处y不会被误解为指针CTestClass *pointer; / pointer to CTestClassvoid Modify( Tint &aInteger ); / reference parameter used4.6 常量 在C+ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。 常量定义以大写字母K开头,代码中的字符,大于0,小于-1的整型变量及其他非整型变量一律用常量定义例如: const int KMagicNumber = 100; const string KUserName = “use

23、rname”; 常量定义在源文件中,尽量避免在头文件中定义常量 如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。例如:constfloat KRadius = 100;constfloat KDiameter = KRadius * 2;4.7 枚举变量 枚举变量定义应该包含在特定的类中 枚举和它的成员的定义,应该采用有意义的命名方式,避免出现歧义 枚举变量的命名以T开头,枚举成员以E开头 枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。 例子 :clas

24、s CTestClass . enum TTestType ETestEumFist, ETestEumSecond, . ; .;4.8 全局变量 尽量避免应用全局变量,如果有特殊情况必须定义的话,全局变量以大写G开头5 表达式和基本语句5.1 运算符的优先级 一元运算符 +-* 的优先级高于对应的二元运算符。 如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。例如:word = (high = b & c d & c + f = g + h ; / 复合表达式过于复杂 不要有多用途的复合表达式。例如:d = (a = b + c) + r ; 该表达式既求a值又

25、求d值。应该拆分为两个独立的语句:a = b + c;d = a + r; 不要把程序中的复合表达式与“真正的数学表达式”混淆。例如: if (a b c) / a b c是数学表达式而不是程序表达式并不表示 if (ab) & (bc)而是成了令人费解的if ( (ab)=”或“=-EPSINON) & (x=EPSINON)其中EPSINON是允许的误差(即精度)。 应当将指针变量用“=”或“!=”与NULL比较。 指针变量的零值是“空”(记为NULL)。尽管NULL的值与0相同,但是两者意义不同。假设指针变量的名字为p,它与零值比较的标准if语句如下: if (p = NULL) / p

26、与NULL显式比较,强调p是指针变量 if (p != NULL) 不要写成 if (p = 0) / 容易让人误解p是整型变量 if (p != 0) 或者if (p) / 容易让人误解p是布尔变量 if (!p) 5.4 循环语句的效率 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。低效率:长循环在最外层高效率:长循环在最内层for (row=0; row100; row+)for ( col=0; col5; col+ )sum = sum + arowcol;for (col=0; col5; col+ )for (row=0

27、; row100; row+) sum = sum + arowcol; 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。效率低但程序简洁效率高但程序不简洁for (i=0; iN; i+)if (condition) DoSomething();else DoOtherthing();if (condition)for (i=0; iN; i+)DoSomething();elsefor (i=0; i80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。示例:if (very_lon

28、ger_variable1 = very_longer_variable12)& (very_longer_variable3 = very_longer_variable14)& (very_longer_variable5 = very_longer_variable16) dosomething();virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix, CMatrix rightMatrix);for (very_longer_initialization; very_longer_condition; very_longer_upda

29、te) dosomething(); 不允许把多个短语句写在一行中,即一行只写一条语句;if、for、while、do等语句自占一行,执行语句不得紧跟其后。示例:风格良好的代码行风格不良的代码行int width; / 宽度int height; / 高度int depth; / 深度int width, height, depth; / 宽度高度深度x = a + b;y = c + d;z = e + f;x = a + b; y = c + d;z = e + f;if (width height) dosomething();if (width height) dosomething(

30、);for (initialization; condition; update)dosomething();/ 空行other();for (initialization; condition; update) dosomething();other(); 对齐只使用空格键,不使用TAB键。说明:以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐。 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。 尽可能在定义变量的同时初始化该变量(就近原则)示例:int width = 10; / 定义

31、并初绐化width int height = 10; / 定义并初绐化height int depth = 10; / 定义并初绐化depth 程序块的分界符(如C/C+语言的大括号和)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。示例:风格良好的对齐风格不良的对齐void Function(int x) / program codevoid Function(int x) / program codeif (condition) / prog

32、ram codeelse / program codeif (condition) / program codeelse / program codefor (initialization; condition; update) / program codefor (initialization; condition; update) / program codeWhile (condition) / program codewhile (condition) / program code6.2 注释 一般情况下,源程序有效注释量必须在20以上,注释的原则是有助于对程序的阅读理解,在该加的地方

33、都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。 版权和版本的声明位于头文件和定义文件的开头版权和版本的声明/-/ Copyright (c) 2009, Software College of Hebei Normal University/ FILENAME: filename.h / DESCRIPTION: / / AUTHOR:/ DATE:/ Version:/- 函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。函数的注释/-/ Function: /Function name/ Description: filenam

34、e.h /- 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。 注释的内容要清楚、明了,含义准确,防止注释二义性。 避免在注释中使用缩写,特别是非常用缩写。7 内存管理7.1 创建与销毁 不要混用C和C+的内存操作函数和操作符 用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。 用free或delete释放了内存或对象之后,立即将指针设置为NULL,防止产生“野指针”。 回收用 new 分配的一组对象的内存空间的时候用 delete 动态内存的申请与释放必须配对,防止内存泄漏。7.2 数组与指针 不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。 避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁