ImageVerifierCode 换一换
格式:PPT , 页数:43 ,大小:537KB ,
资源ID:1395867      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1395867.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Windows系统开发C基础.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Windows系统开发C基础.ppt

1、Windows系统开发,计算机与信息工程学院,Windows编程,驱动程序开发DDK、WDKDriverStudio、Windriver应用软件开发c/c:主流的开发平台为Visual C+,它以 c+语言为基础。特点:代码执行 效率高Java:适合开发基于Web的应用程序,第一章 C+基础,1.1 C+概述,1.2 类和对象,1.3 继承和派生,1.4 多态和虚函数,1.1 C+概述,1.1.1 C+程序创建,Visual C+不仅是一个编译器,更是微软公司推出的一个全面的可视化编程环境。Visual C+6.0是在以往版本不断更新的基础上形成的,成为目前流行的Windows应用程序集成开发

2、环境。,1.创建工作文件夹创建Visual C+6.0的工作文件夹,以后所有创建的C+程序都在此文件夹下,这样既便于管理,又容易查找。2.启动Visual C+6.0选择“开始”“程序”“Microsoft Visual Studio 6.0”“Microsoft Visual C+6.0”,运行Visual C+6.0。3.添加C+程序选择“文件“菜单“新建“,在新建对话框中选择“文件“选项卡“C+Source File”,输入文件名为Simple1。点击确定按钮,在新建的Simple1.cpp文件中输入如下代码。(Simple1示例),/*第一个简单的C+程序*/#include clas

3、s CDraw/定义类int x,y;/定义变量 void Output()/定义函数coutx yendl;int main()CDraw draw;/定义类的对象draw.x=5;draw.y=8;/为成员变量赋值draw.Output();return 0;,1.1.2 C+程序结构 每一个C+程序源文件通常是以.cpp扩展名,它是由编译预处理指令、数据或数据结构定义以及若干个函数组成。1.main函数 代码中,main表示主函数,由于每一个程序执行时都必须从main开始,而不管该函数在整个程序中的具体位置,因此每一个C+程序或由多个源文件组成的C+项目都必须包含一个且只有一个main函

4、数。C+规定main函数的返回值为int型,(c语言编写的程序中,main函数的返回值为void型),2.头文件包含 C+文件包含#include的编译指令,称为预处理指令。#include后面的iostream.h是C+编译器自带的文件,称为C+库文件,它定义了标准输入/输出流的相关数据及其操作,由于程序用到了输入/输出流对象cin和cout,因而需要用#include将其合并到程序中,又由于它们总是被放置在源程序文件的起始处,所以这些文件被称为头文件(Header File)。,3.注释 通常,必要的注释内容应包含:在源文件头部进行必要的源程序的总体注释:版权说明、版本号、生成日期、作者、

5、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。在函数的头部进行必要的函数注释:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。其他的少量注释。如全局变量的功能、取值范围等。千万不要陈述那些一目了然的内容,否则会使注释的效果适得其反。,需要说明的是,C+中的“/*.*/”是用来实现多行的注释,它是将由“/*”开头到“*/”结尾之间所有内容均视为注释,称为块注释。块注释(“/*.*/”)的注解方式可以出现在程序中的任何位置,包括在语句或表达式之间。而“/”只能实现单行的注释,它是将“/”开始一直到行尾的内容作为注释,称为行注释。,编译、运行点

6、击编译工具栏 的Bulid按钮,或按F7,对C+源文件进行编译和连接,若出现如下提示,则编译成功若编译成功,点击 按钮,或按Ctrl+F5,运行程序,分析上述程序中出现错误的原因,1.2类和对象,class/声明部分public:private:protected:;/实现部分,1.2.1 类的声明C+中,声明一个类的一般格式如下:,注意,类体中最后一个大括号后面的分号“;”不能省略。,在Visual C+中,常用大写的C字母开始的标识符作为类名,C用来表示类(Class),以与对象、函数及其他数据类型的名称相区别。,访问权限关键词public、private、protected在类中使用先后

7、次序无关紧要,且可使用多次。每个访问权限关键词为类成员所确定的访问权限是从该关键词开始到下一个关键词为止。默认访问权限为private,成员函数是用来对数据成员进行操作,又称为方法。当类的成员函数的定义是在类体外部完成时,必须用作用域运算符“:”来告知编译系统该函数所属的类。此时,成员函数的定义格式如下:,:(),class CDrawint x,y;void Output()coutx yendl;,class CDrawpublic:int x,y;void Output();void CDraw:Output()coutx yendl;,(1)类中的数据成员的数据类型可以是任意的,包含整

8、型、浮点型、字符型、数组、指针和引用等,也可以是另一个类的对象。例如:class COne;class CTwo private:float x;COne a;;,类的几点说明:,(2)类是一种数据类型,系统不会为其分配内存空间,所以在定义类中的数据成员时,不能对其进行初始化,也不能指定除static之外的任何存储类型。例如:class CDraw private:int x=0;/错误 auto int y;/错误:不合法的存储类型;,存储类型:动态存储类型:局部变量 静态存储类型:全局变量、成员变量,(3)在进行类设计时,通常将数据成员声明为私有的,而将大多数成员函数声明为公有的。这样,类

9、以外的代码不能直接访问类中的私有数据,从而实现了数据的封装。而公有成员函数可为内部的私有数据成员提供外部接口,但接口实现的细节在类外又是不可见的。,(4)当程序比较大时,应尽量将类单独存放在一个文件中或将类的声明放在头文件中,而将成员函数的实现放在与头文件同名的.cpp文件中。,1.2.2 对象的定义和初始化 类对象有3种定义方式:声明之后定义、声明之时定义和一次性定义。例如:class A;A a;/声明之后定义 class B b,c;/声明之时定义 class d,e;/一次性定义 但为了提高程序的可读性,真正将“类”当成一个密闭、“封装”的盒子(接口),在程序中应尽量使用对象的声明之后

10、定义方式。,1.2.3 对象成员的访问访问对象的成员变量和成员函数与访问一般变量和函数的方法是一样的,只不过须在成员前面加上对象名和成员运算符“.”,其表示方式如下:,.(),若对象是一个指针,则对象的成员访问形式如下:,-(),CDraw draw;draw.x=5;draw.y=8;draw.Output();,CDraw*pdraw,a;pdraw=,需要说明的是,下面的两种表示是等价的(对于成员函数也适用):,-(*).,例如:CDraw*pdraw,a;pdraw=,a.x=5;,pdraw-x=5;,(*pdraw).x=5;,1.2.3 构造函数和析构函数(1)构造函数 在类的定

11、义中是不能对数据成员进行初始化的。为了能给数据成员设置某些初值,这时就要使用类的特殊成员函数构造函数。构造函数的最大特点是在对象建立时它会被自动执行,因此用于变量、对象的初始化代码一般放在构造函数中。C+规定,一个类的构造函数必须与相应的类同名,它可以带参数,也可以不带参数,但不能有返回值,构造函数必须是公有型成员函数,否则类无法实例化。,如果没有定义任何构造函数,则编译器自动为类隐式生成一个不带任何参数的默认构造函数。例如,对于CDraw类来说,默认构造函数的形式如下:CDraw()/默认构造函数的形式 默认构造函数的目的是使下列对象定义形式合法:CDraw draw;/即:draw.CDr

12、aw();会自 动调用默认构造函数 当类定义中指定了构造函数,则隐式的默认构造函数不再存在.。,例如:class CDraw Private:int x,y;public:void Output()coutx yendl;CDraw()x=0;y=0;,与一般的成员函数定义相同,构造函数也可以重载,也可以有默认的形参值class CDraw public:CDraw()x=0;y=0;CDraw(int a,int b)x=a;y=b;,2.析构函数与构造函数相对应的是析构函数(Destructor)。它在类名称前加上一个“”符号(逻辑非),以与构造函数功能相反。,例如:class CDraw

13、 public:.CDraw()/析构函数.;,(1)每一个类只能有一个析构函数,且应为public,但不能被重载,没有任何参数,不能有返回值(包括void)。(2)与默认构造函数类似,若类的声明中没有定义析构函数时,则编译也会自动生成一个隐式的不做任何操作的默认析构函数。,1.2.4 new和delete 由于一个类的成员的数据类型可以是任何有效的合法的类型,因而若数据类型为指针时,则这样的成员称为指针成员,但此时要注意指针成员的潜在危险。(例如),为了保证类的封装性,类中的指针成员所指向的内存空间必须在类中自行独立开辟和释放。(修改代码),1.2.5 this指针,在类的每一个成员函数中都

14、包含一个特殊的指针,称为this指针,它指向本类对象,它的值是当前被调用函数所在对象的起始地址。This指针作为参数隐式的传递给每一个成员函数例如,当成员函数的形参名与该类的成员变量名同名时,则必须用this指针来显式区分,例如:class CPoint public:CPoint(int x=0,int y=0)this-x=x;this-y=y;privateint x,y;,*this的含义是什么?,(*this).x=x,1.2.6 对象赋值(例)通过构造函数 CName o1;/通过构造函数中设定初值 CName o2(“DING”);/通过重载构造函数传递初值通过赋值语句 o1=o

15、2;通过其它对象赋值 CName o3(o2);每一个类总有一个默认拷贝构造函数,其原型为 CName(const CName&),1.3继承和派生,当一个新类从一个已定义的类中派生,新类不仅继承了原有类的属性和方法,并且可以有自己新的属性和方法,称之为类的继承和派生。被继承的类称为基类或超类(父类)。在基类或父类的上建立的新类称为派生类或子类。,class:,;,派生类的定义格式:,基类必须是在派生类定义前已作过定义的类,若是在派生类后面定义,而仅仅在派生类定义前作基类的提前声明,则是不合法的。例如,下面的代码:class CBase;/基类CBase作提前声明 class CDerived

16、:public CBase/错误:CBase未定义 int z;class CBase/基类的定义 int x,y;,1.公有继承。特点:在派生类中,基类的公有成员、保护成员和私有成员的访问属性保持不变。在派生类中,基类的私有成员被隐藏冷,只有基类的私有成员是无法访问的。派生类对象只能访问派生类和基类的公有(public)成员。,继承方式,2.私有继承。特点:在派生类中,基类的公有成员、保护成员和私有成员的访问属性都将变成私有(private),且基类的私有成员在派生类中被隐藏。因此,私有继承方式下,在派生类中仍可访问基类的公有(public)和保护(protected)成员。由于基类的所有成员在派生类中都变成私有,因此基类的所有成员在派生类的子类中都是不可见的。实际上相当于终止基类的继续派生。正因为如此,实际应用中私有继承的使用情况一般比较少见。另外,派生类对象只能访问派生类的公共有成员,而不能访问基类的任何成员。,继承方式,3.保护继承。特点:在派生类中,基类的公有成员、保护成员的访问属性都将变成保护的,同样,基类的私有成员在派生类中也是被隐藏的。同私有继承一样,在保护继承方式下,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1