第2章开发环境简介_第1页
第2章开发环境简介_第2页
第2章开发环境简介_第3页
第2章开发环境简介_第4页
第2章开发环境简介_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-2-第第2 2章章 开发环境简介开发环境简介 2.1 C+2.1 C+语言基础语言基础 2.2 MFC2.2 MFC编程编程 2.3 SQL2.3 SQL基础基础 2.4 Pro2.4 Pro* *C/C+C/C+程序开发程序开发 2.5 ADO2.5 ADO数据库访问数据库访问 2.6 2.6 编程规范编程规范 本章小结本章小结目目 录录-3-第第2 2章章 开发环境简介开发环境简介2.1 C+2.1 C+语言基础语言基础 Microsoft Visual C+ Microsoft Visual C+(简称(简称Visual C+Visual C+、MSVCMSVC、VC+VC+或或VCV

2、C)是微)是微软公司推出的面向对象的软公司推出的面向对象的Win32Win32程序可视化集成开发环境,可提供编辑程序可视化集成开发环境,可提供编辑C C语言,语言,C+C+语言以及语言以及C+/CLIC+/CLI等编程语言。通过等编程语言。通过AppWizardAppWizard工具可以自动工具可以自动生成程序框架,并且通过简单设置可使程序框架支持数据库接口、生成程序框架,并且通过简单设置可使程序框架支持数据库接口、ActiveXActiveX控件、控件、WinSockWinSock以及以及3D3D控件等。控件等。2.1.1 C+2.1.1 C+数据类型数据类型基本数据类型基本数据类型 C99

3、 C99标准中标准中C+C+语言提供的基本数据类型如下:语言提供的基本数据类型如下: v布尔型:布尔型:boolboolv字符型:字符型:charcharv整型:整型:shortshort、intint、longlongv浮点型:浮点型:floatfloat、doubledoublev空类型:空类型:voidvoid-4-第第2 2章章 开发环境简介开发环境简介说明:说明:v 类型修饰符类型修饰符signedsigned和和unsignedunsigned可用于修饰字符型和整型,当它可用于修饰字符型和整型,当它们修饰们修饰intint时可省略时可省略intint。v voidvoid类型不能用

4、来定义变量,通常用于对函数返回值和函数参类型不能用来定义变量,通常用于对函数返回值和函数参数的限定,也可以定义无类型通用指针数的限定,也可以定义无类型通用指针void void * *,用来指向任何,用来指向任何类型的数据。类型的数据。v 各基本数据类型对应字节数和数值范围由操作系统和编译平台各基本数据类型对应字节数和数值范围由操作系统和编译平台决定。决定。v 例如:例如:3232位机上,位机上,sizeof(int)=4sizeof(int)=4,sizeof(long)=4sizeof(long)=4,而,而6464位位机上,机上,sizeof(long)=8sizeof(long)=8。

5、对于指针类型,在。对于指针类型,在3232位机上的字节数位机上的字节数为为4 4,而在,而在6464位机上的字节数为位机上的字节数为8 8。-5-第第2 2章章 开发环境简介开发环境简介枚举类型枚举类型v当某个变量的取值是几种可能存在的值时,可以将其取值一一列举当某个变量的取值是几种可能存在的值时,可以将其取值一一列举出来,以此定义为枚举类型。出来,以此定义为枚举类型。v枚举类型的定义形式为:枚举类型的定义形式为: enum ;v系统对枚举元素是按照常量来处理的,枚举元素也称为枚举常量,系统对枚举元素是按照常量来处理的,枚举元素也称为枚举常量,系统默认从系统默认从0 0开始递增赋值。用户可以在

6、定义枚举类型时对枚举元开始递增赋值。用户可以在定义枚举类型时对枚举元素进行赋值。素进行赋值。v当定义了枚举类型后,就可以定义该枚举类型的变量,系统允许对当定义了枚举类型后,就可以定义该枚举类型的变量,系统允许对枚举变量进行赋值操作。例如:枚举变量进行赋值操作。例如: #include using namespace std; void main() enum workdaySun=1, Mon, Tue, Wen, Thu, Fri, Sat; workday day; day = Wen; coutdayendl; -6-第第2 2章章 开发环境简介开发环境简介结构体结构体结构体类型的定义形

7、式:结构体类型的定义形式:struct ;v 当结构体定义好后,可以直接使用该结构体名定义变量,而不用当结构体定义好后,可以直接使用该结构体名定义变量,而不用在其前加标识符在其前加标识符structstruct。对结构体的访问,可以整体处理,也可。对结构体的访问,可以整体处理,也可对成员进行访问。例如:对成员进行访问。例如: #include using namespace std; void main() struct Student long number; char name10; char sex; ; Student stu = 10001, 李三妹李三妹, F; coutstu.n

8、ameendl; -7-第第2 2章章 开发环境简介开发环境简介2.1.2 2.1.2 基本语句基本语句赋值语句赋值语句 v 赋值语句的一般格式为:赋值语句的一般格式为: ;自增减表达式语句自增减表达式语句v 由自增运算符由自增运算符+和自减运算符和自减运算符-可构成自增减表达式语句,可使可构成自增减表达式语句,可使变量的值加变量的值加1 1或减或减1 1。包括两种形式:。包括两种形式:前缀形式:前缀形式:+i+i, -i -i 先改变先改变i i的值,再使用的值,再使用i i的值。的值。后缀形式:后缀形式:i+i+,i-i- 先使用先使用i i的值,再改变的值,再改变i i的值。例如:的值。

9、例如: int i = 3, j, k; j = i+; k = +i; couti, j, kendl; -8-第第2 2章章 开发环境简介开发环境简介分支语句分支语句v 分支语句用于实现选择结构程序设计,包括分支语句用于实现选择结构程序设计,包括ifelseifelse语句和语句和switchswitch语句。语句。v 常用的五种语法形式如下:常用的五种语法形式如下:if() if () else if() else if() else if() else -9-第第2 2章章 开发环境简介开发环境简介if() if( ) if() else else if( ) else switch(

10、表达式表达式) case : case : case : default: -10-第第2 2章章 开发环境简介开发环境简介v当表达式的值为非零数值时,按当表达式的值为非零数值时,按“真真”处理。当处理语句多于一处理。当处理语句多于一条时,通常需要用花括号条时,通常需要用花括号“”“”将其括起来构成复合语句。将其括起来构成复合语句。vswitchswitch后面的后面的“表达式表达式”可为任何类型,可为任何类型,casecase后面的后面的“常量表达常量表达式式”只是起语句标号作用,并不在该处进行条件判断。只是起语句标号作用,并不在该处进行条件判断。v当找到匹配的标号后按顺序执行其后的所有语句

11、,因此,为了实当找到匹配的标号后按顺序执行其后的所有语句,因此,为了实现只对某一个分支进行处理,需要在其现只对某一个分支进行处理,需要在其casecase语句末尾使用语句末尾使用breakbreak语语句。句。循环语句循环语句v循环语句用于实现循环结构程序设计,包括循环语句用于实现循环结构程序设计,包括whilewhile语句、语句、do- do- whilewhile语句和语句和forfor语句三种。常用的语句形式如下:语句三种。常用的语句形式如下:while() do while();-11-第第2 2章章 开发环境简介开发环境简介for(; ; ) v当循环体包括多条语句时,需要用花括号

12、当循环体包括多条语句时,需要用花括号“”“”将其括起来构将其括起来构成复合语句。成复合语句。vforfor语句的执行过程为:语句的执行过程为:Step1: Step1: 求解表达式求解表达式1 1。Step2: Step2: 求解表达式求解表达式2 2,若值为真则执行循环体,若值为真则执行循环体, 然后执行然后执行Step3Step3;若值为假则结束循环;若值为假则结束循环, 转到转到Step5Step5。Step3: Step3: 求解表达式求解表达式3 3。Step4: Step4: 转到转到Step2Step2 。Step5: Step5: 循环结束,执行循环结束,执行forfor语句下

13、面的一个语句。语句下面的一个语句。-12-第第2 2章章 开发环境简介开发环境简介流程控制语句流程控制语句v breakbreak语句语句一般形式为:一般形式为:break;在在switchswitch语句中语句中breakbreak语句可以使流程跳出语句可以使流程跳出switchswitch结构,继续结构,继续执行执行switchswitch语句下面的一个语句。语句下面的一个语句。在循环结构中在循环结构中breakbreak语句可以使流程从循环体内跳出本层循环语句可以使流程从循环体内跳出本层循环体,即提前结束循环,接着执行本层循环下面的语句。体,即提前结束循环,接着执行本层循环下面的语句。v

14、 continuecontinue语句语句一般形式为:一般形式为:continue;在循环结构中在循环结构中continuecontinue语句用来结束本次循环。即跳过语句用来结束本次循环。即跳过continuecontinue下面的尚未执行的语句,接着进行条件判断而决定是下面的尚未执行的语句,接着进行条件判断而决定是否执行下一次循环。否执行下一次循环。-13-第第2 2章章 开发环境简介开发环境简介2.1.3 2.1.3 注释注释C+C+语言中有两种注释符:语言中有两种注释符:v “/”“/”:通常用于对单行进行注释,因此也称为单行注释符。:通常用于对单行进行注释,因此也称为单行注释符。v

15、“/“/* * */”/”:称为块注释符或多行注释符,可以对任意行进行:称为块注释符或多行注释符,可以对任意行进行注释。注释。在进行多行注释时,也可以逐行使用在进行多行注释时,也可以逐行使用“/”“/”。特别要注意的是,使用。特别要注意的是,使用“/“/* * */”/”时不要进行嵌套。时不要进行嵌套。2.1.4 2.1.4 引用引用引用是引用是C+C+语言新增的一个类型,用标识符语言新增的一个类型,用标识符& &表示。引用是给变量或对表示。引用是给变量或对象起一个别名。象起一个别名。引用变量的定义形式为:引用变量的定义形式为: & = ; 例如:例如: int x=1

16、0, &y=x;-14-第第2 2章章 开发环境简介开发环境简介2.1.5 2.1.5 函数函数函数的一般形式为:函数的一般形式为:类型名类型名 函数名函数名(形参表形参表) 函数体函数体v函数的返回值通常由函数的返回值通常由returnreturn语句获得。语句获得。vreturnreturn语句将被调用函数中的一个确定值带回到主调函数中。语句将被调用函数中的一个确定值带回到主调函数中。v一个函数中可以有一个以上的一个函数中可以有一个以上的returnreturn语句,但只能有一个语句,但只能有一个return return 语句被执行。语句被执行。vreturnreturn语句返回

17、的函数值类型应与定义函数时说明的函数类型语句返回的函数值类型应与定义函数时说明的函数类型一致。一致。-15-第第2 2章章 开发环境简介开发环境简介输出型参数输出型参数v 当函数有多个处理结果同时要传给上层调用者时,当函数有多个处理结果同时要传给上层调用者时,returnreturn语句就语句就不能满足需求,此时可设计函数的参数为输出型参数。不能满足需求,此时可设计函数的参数为输出型参数。v 函数实现输出型参数是通过传地址方式进行的。具体包括两种方函数实现输出型参数是通过传地址方式进行的。具体包括两种方法:法:将形参设计为指针类型。将形参设计为指针类型。 将形参设计为引用类型。将形参设计为引用

18、类型。例如,设计一个函数求球体的表面积和体积。例如,设计一个函数求球体的表面积和体积。void Sphere_1(float r, float *s, float *v) *s = 3.14*r*r; *v = 4*3.14*r*r*r/3;void Sphere_2(float r, float &s, float &v) s = 3.14*r*r; v = 4*3.14*r*r*r/3;-16-第第2 2章章 开发环境简介开发环境简介 调用形式为:调用形式为: float radius=10, area1, volume1, area2, volume2; Sphere_1

19、(radius, &area1, &volume1); Sphere_2(radius, area2, volume2);当大型对象被传递给函数时,使用引用参数可使参数传递效当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的副本,也就是参数传率得到提高,因为引用并不产生对象的副本,也就是参数传递时,对象无须复制。递时,对象无须复制。带缺省参数的函数带缺省参数的函数v在进行函数定义时,在进行函数定义时,C+C+语言允许参数可以带默认值。例如:语言允许参数可以带默认值。例如: void Sphere_3(float &s,float &a

20、mp;v, float r=10,char*color=red); v当进行函数调用时,编译器按从左向右顺序将实参与形参结合,当进行函数调用时,编译器按从左向右顺序将实参与形参结合,若调用语句未给出该形参对应的实参,则按该形参的默认值调用若调用语句未给出该形参对应的实参,则按该形参的默认值调用该函数。例如:该函数。例如: Sphere_3(area2, volume2, 100); 相当于:相当于: Sphere_2(area2, volume2, 100, red);-17-第第2 2章章 开发环境简介开发环境简介v 注意:注意:设计函数带缺省参数时,所有取缺省值的参数都必须出现在设计函数带

21、缺省参数时,所有取缺省值的参数都必须出现在不取缺省值的参数的右边。不取缺省值的参数的右边。在调用带缺省参数的函数时,若某个参数省略,则其后的参在调用带缺省参数的函数时,若某个参数省略,则其后的参数皆应省略而采用缺省值。例如:数皆应省略而采用缺省值。例如: Sphere_3(area2, volume2); /正确正确Sphere_3(area2, volume2, “blue”); /错误错误函数重载函数重载v 函数重载指在同一个作用域内,多个函数可以使用相同的函数名函数重载指在同一个作用域内,多个函数可以使用相同的函数名,而参数个数或参数类型不同。而参数个数或参数类型不同。v 被重载的函数称

22、为重载函数,通常一组重载函数应实现相似的功被重载的函数称为重载函数,通常一组重载函数应实现相似的功能。能。v 在设计重载函数时必须在参数列表部分相区别,而与返回值类型在设计重载函数时必须在参数列表部分相区别,而与返回值类型无关。无关。当存在多个重载函数时,系统对重载函数的调用会自动进行匹配。当存在多个重载函数时,系统对重载函数的调用会自动进行匹配。-18-第第2 2章章 开发环境简介开发环境简介例如:定义如下三个重载函数。例如:定义如下三个重载函数。 int mul(int x, int y) / return x*y; int mul(int x, int y, int z) /return

23、 x*y*z; float mul(int x, float y) / return x*y;测试代码如下:测试代码如下: void main() int a=3, b=4, c=5; float d=2.5; coutmul(a,b)endl; /调用调用 coutmul(a,b,c)endl; /调用调用 coutmul(a,d)endl; /调用调用 -19-第第2 2章章 开发环境简介开发环境简介v 注意:注意: 在函数重载时最好不要使用缺省参数,否则可引起二义性。在函数重载时最好不要使用缺省参数,否则可引起二义性。 例如,在上例中若:例如,在上例中若: int mul(int x,

24、int y, int z=10); 则则 mul(a,b);语句的调用匹配会出现二义性。语句的调用匹配会出现二义性。内联函数内联函数v C+C+中的内联函数是用来消除函数调用时的时间开销。它通常用于中的内联函数是用来消除函数调用时的时间开销。它通常用于函数中语句很少,又要频繁地被调用的函数。函数中语句很少,又要频繁地被调用的函数。v 内联函数的定义有两种情况:内联函数的定义有两种情况:常规函数常规函数定义常规函数时,在函数名前加上关键字定义常规函数时,在函数名前加上关键字“inline”,该函数则为内联函数。该函数则为内联函数。 例如:例如: inline float circle(float

25、 r) return 3.1416*r*r; -20-第第2 2章章 开发环境简介开发环境简介成员函数成员函数在在C+C+中,类的内部定义了函数体的成员函数默认为内联中,类的内部定义了函数体的成员函数默认为内联函数。函数。当在类中只对成员函数进行声明,而在类外进行定义时,当在类中只对成员函数进行声明,而在类外进行定义时,如果在函数名前加上关键字如果在函数名前加上关键字“inline”,则该成员函数,则该成员函数也为内联函数。也为内联函数。 例如:例如: class Test private: int x; public: void set(int xx) x=xx; /内联函数内联函数 int

26、 get(); ; inline int Test :get() /内联函数内联函数 return x; ; -21-第第2 2章章 开发环境简介开发环境简介v在使用内联函数时,应注意如下几点:在使用内联函数时,应注意如下几点: 在内联函数内不允许用循环语句和在内联函数内不允许用循环语句和switchswitch语句语句 。 递归函数不能定义为内联函数递归函数不能定义为内联函数 。 内联函数只适合于只有内联函数只适合于只有1 15 5行的小函数行的小函数 。 内联函数的定义必须出现在内联函数第一次被调用之前。内联函数的定义必须出现在内联函数第一次被调用之前。 对内联函数不能进行异常的接口声明。

27、对内联函数不能进行异常的接口声明。-22-第第2 2章章 开发环境简介开发环境简介2.1.6 2.1.6 输入和输出输入和输出 C+C+语言的语言的I/OI/O流类库是采用继承方法建立的一个输入流类库是采用继承方法建立的一个输入/ /输出类库,用输出类库,用来实现内存和输入来实现内存和输入/ /输出设备之间的数据传送。输出设备之间的数据传送。数据从源对象到目的对象的传送被抽象地看做一个数据从源对象到目的对象的传送被抽象地看做一个“流流”。流具有方。流具有方向性,从而可分为:向性,从而可分为:v 输入流输入流v 输出流输出流v 输入输入/ /输出流输出流C+C+中预定义流包括:中预定义流包括:v

28、 标准输入流标准输入流cinv 标准输出流标准输出流coutv 非缓冲型的标准出错流非缓冲型的标准出错流cerrv 缓冲型的标准出错流缓冲型的标准出错流clog。使用预定义流时需要在程序中添加如下代码:使用预定义流时需要在程序中添加如下代码:#includeusing namespace std;-23-第第2 2章章 开发环境简介开发环境简介输入运算符输入运算符v cin对象是系统定义的对象是系统定义的istream类的默认对象类的默认对象。v istream类中对各种基本数据类型重载了输入运算符类中对各种基本数据类型重载了输入运算符“”,对于基本数据类型的数据,可以直接使用该运算符进行输入

29、。对于基本数据类型的数据,可以直接使用该运算符进行输入。例如:例如: int i, j; float f; cinijf;输出运算符输出运算符v cout对象是系统定义的对象是系统定义的ostream类的默认对象。类的默认对象。v ostream类中对各种基本数据类型重载了输出运算符类中对各种基本数据类型重载了输出运算符“”,对于基本数据类型的数据,可以直接使用该运算符进行输出。对于基本数据类型的数据,可以直接使用该运算符进行输出。例如:例如: int x=10; coutx=xendl;-24-第第2 2章章 开发环境简介开发环境简介文件操作文件操作v C+C+中文件输入中文件输入/ /输出

30、操作的基本过程包括:输出操作的基本过程包括:在程序中包含头文件在程序中包含头文件fstream,并使用,并使用using namespace std语句语句; ;创建一个流;创建一个流;将这个流与文件相关联,即打开文件;将这个流与文件相关联,即打开文件;进行文件的读写操作;进行文件的读写操作;关闭文件。关闭文件。v 在在fstream.h文件中包含了输入文件流类文件中包含了输入文件流类ifstream、输出文件、输出文件流类流类ofstream和输入和输入/ /输出文件流类输出文件流类fstream的定义。的定义。v 当创建相应流类的对象后,使用输入当创建相应流类的对象后,使用输入/ /输出运

31、算符或者流类中定义输出运算符或者流类中定义的读写成员函数,就可进行文件的读的读写成员函数,就可进行文件的读/ /写操作。写操作。例如:例如:-25-第第2 2章章 开发环境简介开发环境简介#include using namespace std;void main() ofstream ofs(data.txt);/默认打开方式为文本格式默认打开方式为文本格式 if(!ofs) cerrcant open file!endl; return; char str1 = How are youn; char str2 = Thank you; ofsstr1; ofsstr2; ofs.close

32、();程序运行将在当前工作目录中创建文件程序运行将在当前工作目录中创建文件data.txtdata.txt,该文件中的数据为:,该文件中的数据为:How are youHow are youThank youThank you-26-第第2 2章章 开发环境简介开发环境简介v 创 建 文 件 流 类 的 对 象 时 , 用 逻 辑 或 操 作 加 上 操 作 模 式创 建 文 件 流 类 的 对 象 时 , 用 逻 辑 或 操 作 加 上 操 作 模 式ios:binary,即表示采用二进制格式进行文件流的读,即表示采用二进制格式进行文件流的读/ /写。二写。二进制文件支持随机访问,使用进制文

33、件支持随机访问,使用read()和和write()成员函数读成员函数读/ /写文件。写文件。 例如:下面程序将三个对象数据保存在文件中,然后定位文件指例如:下面程序将三个对象数据保存在文件中,然后定位文件指针到第针到第2 2条记录,读取第条记录,读取第2 2个对象数据并输出。个对象数据并输出。 #include using namespace std; class Test int x; public: int get() return x; void set(int a=0) x = a; ; -27-第第2 2章章 开发环境简介开发环境简介int main() fstream file(t

34、est.dat, ios:in|ios:out|ios:binary); if(!file) cerrcant open file!endl; return 1; Test t3, tt; for(int i=0; i3; i+) ti.set(i+1);file.write(char*)&ti,sizeof(class Test); file.seekp(1*sizeof(class Test), ios:beg); file.read(char*)&tt, sizeof(class Test); file.close(); coutx=tt.get()endl; retur

35、n 0;程序输出:程序输出:x=2x=2-28-第第2 2章章 开发环境简介开发环境简介2.1.7 2.1.7 类与对象类与对象 类是对客观世界中具有相同属性和行为的对象的抽象描述。类是对客观世界中具有相同属性和行为的对象的抽象描述。类是面向类是面向对象程序设计的核心,它是一种新的数据类型。对象程序设计的核心,它是一种新的数据类型。在在C+C+语言中,将类的属性称为成员变量,将类的行为称为成员函数。语言中,将类的属性称为成员变量,将类的行为称为成员函数。通常把类的成员变量和成员函数简称为类的成员。通常把类的成员变量和成员函数简称为类的成员。类的定义类的定义v 类的定义形式为:类的定义形式为:

36、class private: protected: public: ;-29-第第2 2章章 开发环境简介开发环境简介v 访问权限声明访问权限声明private声明的成员对外部程序不可见,称为私有成员。声明的成员对外部程序不可见,称为私有成员。protected声明的成员对外部程序不可见,而对派生类是声明的成员对外部程序不可见,而对派生类是可见的,称为保护成员。可见的,称为保护成员。public声明的成员对外部程序是可见的,称为公有成员。声明的成员对外部程序是可见的,称为公有成员。成员变量成员变量v 设计类时,在一般情况下,应该将成员变量设计为私有访问权设计类时,在一般情况下,应该将成员变量设

37、计为私有访问权限,将外部程序需要访问的成员函数设计为公有访问权限。类限,将外部程序需要访问的成员函数设计为公有访问权限。类成员的默认访问权限为成员的默认访问权限为private。v 成员变量的设计限制:成员变量的设计限制:成员变量不能在定义时初始化;成员变量不能在定义时初始化;成员变量不能递归定义,即不能用自身的类类型定义成员变成员变量不能递归定义,即不能用自身的类类型定义成员变量。但可定义当前类的对象指针。量。但可定义当前类的对象指针。例如:例如:-30-第第2 2章章 开发环境简介开发环境简介 class Test int x; Test t; /错误错误 Test *tp; /正确正确

38、public: void print(); ;成员函数成员函数 当在类定义中只对成员函数进行声明,而在类外定义时,必须在函当在类定义中只对成员函数进行声明,而在类外定义时,必须在函数名前添加数名前添加“类名类名:” :” 。 例如:例如: void Test:print() coutx=xendl; v构造函数构造函数 构造函数是一种特殊的成员函数。当创建类的实例时,系统构造函数是一种特殊的成员函数。当创建类的实例时,系统会自动调用构造函数完成对象的初始化操作。会自动调用构造函数完成对象的初始化操作。-31-第第2 2章章 开发环境简介开发环境简介构造函数的设计方法如下:构造函数的设计方法如下

39、:构造函数名必须和类名完全相同。构造函数名必须和类名完全相同。构造函数的参数通常用来设置对象的初始值。构造函数的参数通常用来设置对象的初始值。构造函数不需要返回值类型,也不能使用构造函数不需要返回值类型,也不能使用voidvoid类型。类型。构造函数的访问权限一定是公有的(构造函数的访问权限一定是公有的(publicpublic)。)。在构造函数中,对于在构造函数中,对于constconst类型成员变量、引用类型成员类型成员变量、引用类型成员变量以及对象成员变量,变量以及对象成员变量,C+C+语法不允许使用赋值语句直语法不允许使用赋值语句直接赋值,此时必须使用初始化表对成员变量进行初始化赋接赋

40、值,此时必须使用初始化表对成员变量进行初始化赋值。值。初始化表位于构造函数头部后面,格式为:初始化表位于构造函数头部后面,格式为: : : 成员变量成员变量( (初始值初始值) ),成员变量,成员变量( (初始值初始值) )如果类中没有定义构造函数,系统会提供一个默认的无参构如果类中没有定义构造函数,系统会提供一个默认的无参构造函数。构造函数可以重载。例如:造函数。构造函数可以重载。例如: class Test int x; float y; public: Test(int i) : x(i) Test(int i, float j) : x(i), y(j) ;-32-第第2 2章章 开发

41、环境简介开发环境简介v 析构函数析构函数当程序中创建的对象脱离其作用域,或用当程序中创建的对象脱离其作用域,或用deletedelete运算符释放动运算符释放动态对象占用的内存空间时,系统会自动调用析构函数,完成一态对象占用的内存空间时,系统会自动调用析构函数,完成一些扫尾工作。些扫尾工作。对象的析构顺序与构造顺序相反。对象的析构顺序与构造顺序相反。例如:例如: #include #include using namespace std; class Test int num; char *name; public: Test(int i=0, char *n=abc):num(i) name

42、 = new char20; strcpy(name, n); -33-第第2 2章章 开发环境简介开发环境简介 void show() coutnum: numendl; coutname: nameendl; Test() coutbye : numendl; delete name; ;-34-第第2 2章章 开发环境简介开发环境简介对象对象v 类的实例称作对象。类的实例称作对象。v 类的定义描述了属于该类的对象的属性和行为,而对象则是符合类的定义描述了属于该类的对象的属性和行为,而对象则是符合这种定义的一个具体实例。在外部程序中,可以直接访问对象的这种定义的一个具体实例。在外部程序中,

43、可以直接访问对象的公有成员函数。公有成员函数。v 创建对象有两种方式:创建对象有两种方式:创建自动对象创建自动对象 类名类名 对象名对象名( (参数参数) ); 例如:类例如:类TestTest的定义如上,若有下面程序:的定义如上,若有下面程序: void main () Test t1, t2(1, Tom),t3(2); t1.show(); t2.show(); t3.show(); 程序运行结果为:程序运行结果为: num: 0num: 0 name: abcname: abc num: 1num: 1 name: Tomname: Tom num: 2num: 2 name: abc

44、name: abc bye: 2bye: 2 bye: 1bye: 1 bye: 0bye: 0-35-第第2 2章章 开发环境简介开发环境简介创建动态对象创建动态对象 类名类名 * *对象指针名对象指针名= new = new 类名类名( (参数参数) );newnew运算符用来向系统动态申请一块内存空间。运算符用来向系统动态申请一块内存空间。newnew运算符运算符 的语法格式为:的语法格式为: new new 类型名类型名( (初始值初始值) ) 或者或者 new new 类型名类型名 数组个数数组个数 当动态空间申请失败,当动态空间申请失败,newnew运算符返回空指针运算符返回空指针

45、NULLNULL;当动态空;当动态空间申请成功,间申请成功,newnew运算符返回指向该内存单元的起始地址。运算符返回指向该内存单元的起始地址。 例如:例如: / /动态申请一个内存空间,并初始化为动态申请一个内存空间,并初始化为1010 int *p1 = new int(10); / /动态申请一组内存空间,包括动态申请一组内存空间,包括1010元素元素 int *p2 = new int10;对于使用对于使用newnew申请的动态空间,必须使用申请的动态空间,必须使用deletedelete运算符进行释运算符进行释放。放。DeleteDelete运算符的语法格式为:运算符的语法格式为:

46、delete delete 指针;指针; 或者或者 delete delete 指针;指针; 例如:例如: delete p1; delete p2;-36-第第2 2章章 开发环境简介开发环境简介2.2 MFC2.2 MFC编程编程2.2.1 MFC2.2.1 MFC应用程序框架应用程序框架应用程序框架通常是指一个完整的程序模型,具备标准应用软件所需的应用程序框架通常是指一个完整的程序模型,具备标准应用软件所需的一切基本功能。一切基本功能。在在Visual C+Visual C+集成开发环境中,使用集成开发环境中,使用MFC AppWizardMFC AppWizard(应用程序向导)工(应

47、用程序向导)工具可以生成两类具可以生成两类MFCMFC应用程序框架:应用程序框架:v 基于文档基于文档/ /视图结构的应用程序框架视图结构的应用程序框架v 基于对话框的应用程序框架基于对话框的应用程序框架基于文档基于文档/ /视图结构的应用程序框架视图结构的应用程序框架v 文档用于保存数据并对数据进行处理,视图是一个从文档用于保存数据并对数据进行处理,视图是一个从CViewCView类派生类派生出来的窗口,也是一个可视化的矩形区域,文档的内容通过视图窗出来的窗口,也是一个可视化的矩形区域,文档的内容通过视图窗口显示给用户,这种文档和视图的结合,称为口显示给用户,这种文档和视图的结合,称为“文档

48、文档/ /视图结构视图结构”。-37-第第2 2章章 开发环境简介开发环境简介v 框架类框架类在文档在文档/ /视图结构中,视图显示在框架窗口中。视图结构中,视图显示在框架窗口中。框架类负责管理程序的主窗口,它为视图提供可视的窗口边框架类负责管理程序的主窗口,它为视图提供可视的窗口边框,包括标题栏、菜单栏、工具栏、状态栏和一些标准的窗框,包括标题栏、菜单栏、工具栏、状态栏和一些标准的窗口组件。口组件。框架类还可响应标准的窗口消息,如窗口的最大化、最小化框架类还可响应标准的窗口消息,如窗口的最大化、最小化等。等。当框架窗口关闭时,其中的视图类对象也被自动删除。当框架窗口关闭时,其中的视图类对象也

49、被自动删除。在在SDISDI应用程序中,应用程序中,AppWizardAppWizard会自动添加一个继承自会自动添加一个继承自CFrameWndCFrameWnd类的类的CMainFrameCMainFrame类作为主框架类。类作为主框架类。在在MDIMDI应用程序中,主框架类的基类为应用程序中,主框架类的基类为CMDIFrameWndCMDIFrameWnd,还会包,还会包含子框架窗口类含子框架窗口类CchildFrameCchildFrame,其基类为,其基类为CMDIChildWndCMDIChildWnd类。类。v 应用程序类应用程序类应用程序类是应用程序运行的基础,用来管理整个应用

50、程序,应用程序类是应用程序运行的基础,用来管理整个应用程序,封装了封装了WindowsWindows应用程序要做的初始化、运行和终止三大主要应用程序要做的初始化、运行和终止三大主要任务任务。在该类的在该类的InitInstance()InitInstance()函数中会创建一个文档模板,它负函数中会创建一个文档模板,它负责在运行时创建文档、视图和框架窗口。责在运行时创建文档、视图和框架窗口。-38-第第2 2章章 开发环境简介开发环境简介v 文档类文档类文档类封装了应用程序的数据管理功能,负责存放程序数据、读文档类封装了应用程序的数据管理功能,负责存放程序数据、读出数据并进行出数据并进行I/O

51、I/O操作。操作。当用户启动应用程序,或进行当用户启动应用程序,或进行File|NewFile|New操作时,都需要对文档类操作时,都需要对文档类的数据成员进行初始化。通常数据成员的初始化工作都是在构造的数据成员进行初始化。通常数据成员的初始化工作都是在构造函数中完成,但文档类的数据成员初始化是在函数中完成,但文档类的数据成员初始化是在OnNewDocument()OnNewDocument()成员函数中完成的。成员函数中完成的。在关闭应用程序并删除文档对象时,或进行在关闭应用程序并删除文档对象时,或进行File|OpenFile|Open操作时,操作时,需要清理文档中的数据,该工作由需要清理

52、文档中的数据,该工作由DeleteContents()DeleteContents()成员函数完成员函数完成。成。文档类的析构函数只用于清除那些在对象生存期都将存在的数据文档类的析构函数只用于清除那些在对象生存期都将存在的数据项(如使用项(如使用newnew运算符生成的数据)。运算符生成的数据)。v 视图类视图类视图类负责管理视图窗口,每个视图必须依附于一个框架。视图类负责管理视图窗口,每个视图必须依附于一个框架。视图类一方面接受用户对文档中数据的编辑和修改,将修改的结视图类一方面接受用户对文档中数据的编辑和修改,将修改的结果反馈给文档类,由文档类将修改后的内容保存到磁盘文件中。果反馈给文档类

53、,由文档类将修改后的内容保存到磁盘文件中。另一方面视图类将文档中的数据取出后显示给用户。另一方面视图类将文档中的数据取出后显示给用户。在视图类中,通常通过在视图类中,通常通过CView:Draw(CDCCView:Draw(CDC* * pDC) pDC)方法实现屏幕显方法实现屏幕显示、打印和打印预览功能,对于不同的输出功能会传递不同的设示、打印和打印预览功能,对于不同的输出功能会传递不同的设备上下文指针给备上下文指针给pDCpDC,从而进行,从而进行GDIGDI调用。调用。-39-第第2 2章章 开发环境简介开发环境简介基于对话框的应用程序框架基于对话框的应用程序框架v 基于对话框的应用程序

54、是由一个或多个对话框组成,对话框是一基于对话框的应用程序是由一个或多个对话框组成,对话框是一种特殊类型的窗口,是作为其它一些行为标准化了的窗口(也即种特殊类型的窗口,是作为其它一些行为标准化了的窗口(也即控件)的容器。控件)的容器。v 应用程序类应用程序类应用程序类以类应用程序类以类CWinAppCWinApp为基类,负责应用程序的初始化、运为基类,负责应用程序的初始化、运行和终止。行和终止。在成员函数在成员函数InitInstance ()InitInstance ()中会创建一个对话框类的对象,中会创建一个对话框类的对象,然后调用该对象的然后调用该对象的DoModal ()DoModal

55、()函数实现主对话框的显示。函数实现主对话框的显示。v 对话框类对话框类对 话 框 类 以 类对 话 框 类 以 类 C D i a l o gC D i a l o g 为 基 类 , 该 类 与 对 话 框 资 源为 基 类 , 该 类 与 对 话 框 资 源IDD_EXAMDLG_DIALOGIDD_EXAMDLG_DIALOG相关联,在程序运行时看到的对话框即相关联,在程序运行时看到的对话框即为它的一个实例对象。为它的一个实例对象。在对话框类中可以为对话框中的控件定义相应的成员变量、在对话框类中可以为对话框中的控件定义相应的成员变量、成员函数及消息响应函数。成员函数及消息响应函数。-4

56、0-第第2 2章章 开发环境简介开发环境简介2.2.2 MFC2.2.2 MFC对话框编程对话框编程对话框的创建和使用对话框的创建和使用v 创建和使用对话框一般包括下面几个步骤:创建和使用对话框一般包括下面几个步骤:创建对话框资源创建对话框资源在在WorkspaceWorkspace窗口选择窗口选择ResourceViewerResourceViewer选项卡,用鼠标右选项卡,用鼠标右键单击键单击“Dialog”“Dialog”资源项,在弹出的快捷菜单中选择资源项,在弹出的快捷菜单中选择“Insert Dialog”“Insert Dialog”菜单项,此时系统在右侧工作区打开菜单项,此时系统

57、在右侧工作区打开对话框编辑器,默认的对话框资源对话框编辑器,默认的对话框资源IDID为为“IDD_DIALOG1”“IDD_DIALOG1”。添加添加WindowsWindows标准控件,和标准控件,和ActiveXActiveX控件。控件。设置对话框及控件属性设置对话框及控件属性鼠标右键单击对话框或控件时,在弹出的快捷菜单中选择鼠标右键单击对话框或控件时,在弹出的快捷菜单中选择“PropertiesProperties”菜单项开打开相应的属性对话框,从而可菜单项开打开相应的属性对话框,从而可以设置资源以设置资源IDID和显示风格等属性。和显示风格等属性。当向对话框添加多个控件后,可以使用当向

58、对话框添加多个控件后,可以使用DialogDialog工具栏对控工具栏对控件进行排版,如设置控件大小、间距,设置对齐方式、居件进行排版,如设置控件大小、间距,设置对齐方式、居中方式,并可以单击中方式,并可以单击 预览对话框资源的外观效果。预览对话框资源的外观效果。-41-第第2 2章章 开发环境简介开发环境简介创建对话框派生类创建对话框派生类在对话框资源上双击鼠标左键,会弹出在对话框资源上双击鼠标左键,会弹出MFC ClassWizardMFC ClassWizard对话框,并紧接着弹出对话框,并紧接着弹出Adding a ClassAdding a Class对话框,输入类对话框,输入类名名

59、。为控件添加成员变量为控件添加成员变量选择选择View|ClassWizardView|ClassWizard菜单项,打开菜单项,打开MFC ClassWizardMFC ClassWizard对话框,首先选择对话框,首先选择Member VariablesMember Variables选项卡,然后在选项卡,然后在ProjectProject组合框选择当前工程,在组合框选择当前工程,在Class nameClass name组合框选择组合框选择类。类。在在Controls IDsControls IDs列表框中选择控件后,单击对话框右侧的列表框中选择控件后,单击对话框右侧的“Add Vari

60、able”“Add Variable”按钮,在弹出的按钮,在弹出的Add Member Add Member VariableVariable对话框中输出成员变量名。对话框中输出成员变量名。为控件添加消息处理函数为控件添加消息处理函数选择选择View |ClassWizardView |ClassWizard菜单项,打开菜单项,打开MFC ClassWizardMFC ClassWizard对话框,首先选择对话框,首先选择Message MapsMessage Maps选项卡,然后在选项卡,然后在ProjectProject组合框中选择当前工程,在组合框中选择当前工程,在Class nameClass name组合框中选择类。组合框中选择类。在在Controls IDsContr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论