Windows系统开发C基础PPT文件格式下载.ppt
《Windows系统开发C基础PPT文件格式下载.ppt》由会员分享,可在线阅读,更多相关《Windows系统开发C基础PPT文件格式下载.ppt(43页珍藏版)》请在冰豆网上搜索。
/为成员变量赋值draw.Output();
return0;
1.1.2C+程序结构每一个C+程序源文件通常是以.cpp扩展名,它是由编译预处理指令、数据或数据结构定义以及若干个函数组成。
1.main函数代码中,main表示主函数,由于每一个程序执行时都必须从main开始,而不管该函数在整个程序中的具体位置,因此每一个C+程序或由多个源文件组成的C+项目都必须包含一个且只有一个main函数。
C+规定main函数的返回值为int型,(c语言编写的程序中,main函数的返回值为void型),2.头文件包含C+文件包含#include的编译指令,称为预处理指令。
#include后面的iostream.h是C+编译器自带的文件,称为C+库文件,它定义了标准输入/输出流的相关数据及其操作,由于程序用到了输入/输出流对象cin和cout,因而需要用#include将其合并到程序中,又由于它们总是被放置在源程序文件的起始处,所以这些文件被称为头文件(HeaderFile)。
3.注释通常,必要的注释内容应包含:
在源文件头部进行必要的源程序的总体注释:
版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。
在函数的头部进行必要的函数注释:
函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。
其他的少量注释。
如全局变量的功能、取值范围等。
千万不要陈述那些一目了然的内容,否则会使注释的效果适得其反。
需要说明的是,C+中的“/*.*/”是用来实现多行的注释,它是将由“/*”开头到“*/”结尾之间所有内容均视为注释,称为块注释。
块注释(“/*.*/”)的注解方式可以出现在程序中的任何位置,包括在语句或表达式之间。
而“/”只能实现单行的注释,它是将“/”开始一直到行尾的内容作为注释,称为行注释。
编译、运行点击编译工具栏的Bulid按钮,或按F7,对C+源文件进行编译和连接,若出现如下提示,则编译成功若编译成功,点击按钮,或按Ctrl+F5,运行程序,分析上述程序中出现错误的原因,1.2类和对象,class/声明部分public:
private:
protected:
;
/实现部分,1.2.1类的声明C+中,声明一个类的一般格式如下:
注意,类体中最后一个大括号后面的分号“;
”不能省略。
在VisualC+中,常用大写的C字母开始的标识符作为类名,C用来表示类(Class),以与对象、函数及其他数据类型的名称相区别。
访问权限关键词public、private、protected在类中使用先后次序无关紧要,且可使用多次。
每个访问权限关键词为类成员所确定的访问权限是从该关键词开始到下一个关键词为止。
默认访问权限为private,成员函数是用来对数据成员进行操作,又称为方法。
当类的成员函数的定义是在类体外部完成时,必须用作用域运算符“:
”来告知编译系统该函数所属的类。
此时,成员函数的定义格式如下:
:
(),classCDrawintx,y;
voidOutput()coutxyendl;
classCDrawpublic:
intx,y;
voidOutput();
voidCDraw:
Output()coutxyendl;
(1)类中的数据成员的数据类型可以是任意的,包含整型、浮点型、字符型、数组、指针和引用等,也可以是另一个类的对象。
例如:
classCOne;
classCTwoprivate:
floatx;
COnea;
;
类的几点说明:
(2)类是一种数据类型,系统不会为其分配内存空间,所以在定义类中的数据成员时,不能对其进行初始化,也不能指定除static之外的任何存储类型。
classCDrawprivate:
intx=0;
/错误autointy;
/错误:
不合法的存储类型;
存储类型:
动态存储类型:
局部变量静态存储类型:
全局变量、成员变量,(3)在进行类设计时,通常将数据成员声明为私有的,而将大多数成员函数声明为公有的。
这样,类以外的代码不能直接访问类中的私有数据,从而实现了数据的封装。
而公有成员函数可为内部的私有数据成员提供外部接口,但接口实现的细节在类外又是不可见的。
(4)当程序比较大时,应尽量将类单独存放在一个文件中或将类的声明放在头文件中,而将成员函数的实现放在与头文件同名的.cpp文件中。
1.2.2对象的定义和初始化类对象有3种定义方式:
声明之后定义、声明之时定义和一次性定义。
classA;
Aa;
/声明之后定义classBb,c;
/声明之时定义classd,e;
/一次性定义但为了提高程序的可读性,真正将“类”当成一个密闭、“封装”的盒子(接口),在程序中应尽量使用对象的声明之后定义方式。
1.2.3对象成员的访问访问对象的成员变量和成员函数与访问一般变量和函数的方法是一样的,只不过须在成员前面加上对象名和成员运算符“.”,其表示方式如下:
.(),若对象是一个指针,则对象的成员访问形式如下:
-(),CDrawdraw;
draw.x=5;
draw.Output();
CDraw*pdraw,a;
pdraw=,需要说明的是,下面的两种表示是等价的(对于成员函数也适用):
-(*).,例如:
CDraw*pdraw,a;
pdraw=,a.x=5;
pdraw-x=5;
(*pdraw).x=5;
1.2.3构造函数和析构函数
(1)构造函数在类的定义中是不能对数据成员进行初始化的。
为了能给数据成员设置某些初值,这时就要使用类的特殊成员函数构造函数。
构造函数的最大特点是在对象建立时它会被自动执行,因此用于变量、对象的初始化代码一般放在构造函数中。
C+规定,一个类的构造函数必须与相应的类同名,它可以带参数,也可以不带参数,但不能有返回值,构造函数必须是公有型成员函数,否则类无法实例化。
如果没有定义任何构造函数,则编译器自动为类隐式生成一个不带任何参数的默认构造函数。
例如,对于CDraw类来说,默认构造函数的形式如下:
CDraw()/默认构造函数的形式默认构造函数的目的是使下列对象定义形式合法:
CDrawdraw;
/即:
draw.CDraw();
会自动调用默认构造函数当类定义中指定了构造函数,则隐式的默认构造函数不再存在.。
例如:
classCDrawPrivate:
public:
CDraw()x=0;
y=0;
与一般的成员函数定义相同,构造函数也可以重载,也可以有默认的形参值classCDrawpublic:
CDraw(inta,intb)x=a;
y=b;
2.析构函数与构造函数相对应的是析构函数(Destructor)。
它在类名称前加上一个“”符号(逻辑非),以与构造函数功能相反。
classCDrawpublic:
.CDraw()/析构函数.;
(1)每一个类只能有一个析构函数,且应为public,但不能被重载,没有任何参数,不能有返回值(包括void)。
(2)与默认构造函数类似,若类的声明中没有定义析构函数时,则编译也会自动生成一个隐式的不做任何操作的默认析构函数。
1.2.4new和delete由于一个类的成员的数据类型可以是任何有效的合法的类型,因而若数据类型为指针时,则这样的成员称为指针成员,但此时要注意指针成员的潜在危险。
(例如),为了保证类的封装性,类中的指针成员所指向的内存空间必须在类中自行独立开辟和释放。
(修改代码),1.2.5this指针,在类的每一个成员函数中都包含一个特殊的指针,称为this指针,它指向本类对象,它的值是当前被调用函数所在对象的起始地址。
This指针作为参数隐式的传递给每一个成员函数例如,当成员函数的形参名与该类的成员变量名同名时,则必须用this指针来显式区分,例如:
classCPointpublic:
CPoint(intx=0,inty=0)this-x=x;
this-y=y;
privateintx,y;
*this的含义是什么?
(*this).x=x,1.2.6对象赋值(例)通过构造函数CNameo1;
/通过构造函数中设定初值CNameo2(“DING”);
/通过重载构造函数传递初值通过赋值语句o1=o2;
通过其它对象赋值CNameo3(o2);
每一个类总有一个默认拷贝构造函数,其原型为CName(constCName&
),1.3继承和派生,当一个新类从一个已定义的类中派生,新类不仅继承了原有类的属性和方法,并且可以有自己新的属性和方法,称之为类的继承和派生。
被继承的类称为基类或超类(父类)。
在基类或父类的上建立的新类称为派生类或子类。
class:
;
派生类的定义格式:
基类必须是在派生类定义前已作过定义的类,若是在派生类后面定义,而仅仅在派生类定义前作基类的提前声明,则是不合法的。
例如,下面的代码:
classCBase;
/基类CBase作提前声明classCDerived:
publicCBase/错误:
CBase未定义intz;
classCBase/基类的定义intx,y;
1.公有继承。
在派生类中,基类的公有成员、保护成员和私有成员的访问属性保持不变。
在派生类中,基类的私有成员被隐藏冷,只有基类的私有成员是无法访问的。
派生类对象只能访问派生类和基类的公有(public)成员。
继承方式,2.私有继承。
在派生类中,基类的公有成员、保护成员和私有成员的访问属性都将变成私有(private),且基类的私有成员在派生类中被隐藏。
因此,私有继承方式下,在派生类中仍可访问基类的公有(public)和保护(protected)成员。
由于基类的所有成员在派生类中都变成私有,因此基类的所有成员在派生类的子类中都是不可见的。
实际上相当于终止基类的继续派生。
正因为如此,实际应用中私有继承的使用情况一般比较少见。
另外,派生类对象只能访问派生类的公共有成员,而不能访问基类的任何成员。
继承方式,3.保护继承。
在派生类中,基类的公有成员、保护成员的访问属性都将变成保护的,同样,基类的私有成员在派生类中也是被隐藏的。
同私有继承一样,在保护继承方式下,