VC++_第1章_Visual_C++程序的建立13958.pdf
《VC++_第1章_Visual_C++程序的建立13958.pdf》由会员分享,可在线阅读,更多相关《VC++_第1章_Visual_C++程序的建立13958.pdf(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 1 第 1 章 Visual C+程序的建立 C+面向对象程序设计语言是在 C语言的基础上发展起来的,它与传统的程序设计方式不同,而是一种新的程序设计范型。它对降低软件的复杂性,改善其重要性和维护性,提高软件的生产效率,有着十分重要的意义。因此面向对象程序设计被普遍认为是程序设计方法的一场实质性的革命.Visual C+支持面向对象程序设计,是 Microsoft公司推出的目前应用最为广泛的基于 Windows平台的可视化编程工具。我们将用 Visual C+的强大功能开发 Windows应用程序,设计完成色彩亮丽的可移动的图形图像及千变万化的文字信息和广泛流行的企事业管理、银行、电信、商业
2、、交通、航空航天、教育、游戏等众多的实用软件。1 1 C程序和 C+程序 我们有 C 和 C+编程基础后,才能更好的运用 Visual C+编程工具开发 Windows应用程序。下面我们先用 C语言、C+语言编写一个同样的显示学生信息的程序,熟悉一下它们的编程方法。特别是通过 C+程序设计,进一步掌握面向对象的编程技术,这将对我们学好可视化的 Visual C+程序设计起到促进作用。例 1 用 C 语言编写显示学生信息程序 将 Visual C+6.0软件安装到本机器后,发送到桌面快捷方式。在常用的 e 盘上建一个文件夹名为:vcpp 双击桌面 Visul C+6.0快捷方式FileNewFi
3、leC+source File右边 File处写要建的文件名:学生信息 1 在其下面的 Location即路径名处写:e:vcppok,如图 1.1.1所示,在出现的界面(文档窗口)上可敲入 C 程序,之后单击 BuildBuild是是!(编译运行),便出现图 1.1.2的结果。敲入的 C 程序如下:#include#include struct student /定义 student结构体类型 long num;/学号 char name20;/年龄 char sex10;/性别 float score;/成绩 stu,*p;/直接定义 student结构体类型变量 stu和 student
4、结构体类型指针*p int main()p=&stu;/student结构体的起始地址赋给指针变量 p stu.num=89101;/将学号赋给 stu结构体变量中的成员 num中 strcpy(stu.name,李明);/将姓名赋给 stu结构体变量中的成员 name strcpy(stu.sex,男);/将姓别赋给 stu结构体变量中的成员 sex stu.score=89.5;/将成绩赋给 stu结构体变量中的成员 score /以下 2 个 printf函数输出的结果是相同的。2 printf(学号 No.:%ldn姓名 name:%sn性别 sex:%sn成绩 score:%2.1f
5、n,stu.num,stu.name,stu.sex,stu.score);/stu.num表示 stu结构体变量中的成员 num printf(n学号 No.:%ldn姓名 name:%sn性别 sex:%sn成绩 score:%2.1fn,p-num,p-name,p-sex,p-score);/p-num是代替(*p).num的书写形式,也就是 p-num 等价于(*p).num,它表示 p 指向结构体变/量 stu中的成员 num return 0;图 1.1.1建立 C 语言程序对话框 图 1.1.2 C语言程序运行结果 例 2 用 C+编写显示学生信息程序(1)双击桌面 Visul
6、 C+6.0快捷方式FileNewprojectsWin32 Console ApplicatorProject name处写文件名:学生信息 2,下面 Location处写 e:vcpp okfinishok(2)再在主菜单处点 File NewFile选中 C+Source,右边 Add to Project要置 选中状态,并显示出刚才敲的文件名File处写:学生信息 2.cppok,如图 1.1.3所 示。在出现的窗口界面(文档窗口)上敲入 C+程序。再单击 BuildBuild(编译运行),结果如图 1.1.4所示。敲入的 C+程序如下:#include#include /类的说明部分
7、 class student /定义类(class)student private:/私有部分 public:/公共部分 long num;/学号 char name20;/姓名 char sex10;/性别 float score;/成绩 void sc();/输出函数 protected:/保护部分 3;/类的实现部分 void student:sc()/在 student类里面定义的函数 sc()的具体实现 student stu;student*p=&stu;stu.num=89101;strcpy(stu.name,李明);strcpy(stu.sex,男);stu.score=89
8、.5;/以下 2 种输出结果都是相同的 cout学号 No:stu.numn;cout姓名 name:stu.namen;cout性别 sex:stu.sexn;cout成绩 score:stu.scorenn;cout学号 No:numn;cout姓名 name:namen;cout性别 sex:sexn;cout成绩 score:scorenn;/主函数体 void main()/主函数,程序从这里开始执行 student xx;/定义 student类的对象 xx xx.sc();/sc()是 xx(student)的成员函数,xx.sc()是表示访问 xx 的成员函数 sc()图 1.
9、1.3建立 C+程序对话框 图 1.1.4 C+程序运行结果 我们看到,C 语言是先定义结构体和结构体变量、结构体指针,之后在主函数 main()里用结构体变量和结构体指针输出其变量内容。C+是先定义类,在主函数里用类定义对象,再通过对象里的成员函数输出其变量内容。C 和 C+的最大区别是 C+定义的类里可以有成员函数,通过成员函数完成所要完成的工作,在程序结构上有了深刻变化,是面向对象的。而 C 的结构体里不能定义函数,它不具备类的功能,程序是结构化的、面 4 向过程的。1 2 面向对象的编程技术 面向对象包括面向对象分析和面向对象程序设计。面向对象程序设计技术的提出,主要是为了解决传统的结
10、构化程序设计所不能解决的代码重用问题。1 2 1 类与对象 我们在例 2程序中已经定义了类:student和其对象:xx。“类”就是对具有相同数据和相同操作的一组相似对象的定义,即类是对具有相同特征和行为的一个或多个对象的描述。在面向对象程序设计中,“类”是一个最重要的概念。类的结构(也即类的组成,如例 2 中的:学号num、姓名name、性别 sex、成绩 score、输出函数 sc())是用来确定一类对象的行为的,而这些行为是通过类的内部数据结构和相关操作来确定的。类通过其成员函数(如例 2 中的:sc())来描述这些行为,而成员函数又被称为类的对象向其他对象所提供的服务。与类对应的就是对
11、象了。对象就是由某个特定的类所描述的一个具体的实例。例如,“车”是一个类,一种具体的车如“货运车”就是一个具体的对象了。对象是类的实例,类是具有公共特性的对象的抽象。对象的定义:一个类定义后,就可以定义该类的对象,如:例 2 中的:student xx;其定义的格式为:;其中,类名是用户定义过的类的标识符,对象名可以有一个或多个,多个时要用逗号分隔。被定义的对象即可以是一个普通对象,也可以是一个数组对象或指针对象。如:CMeter myMeter,*Meter,Meters5;这时,myMeter是类 CMeter的一个普通对象,Meter和 Meters分别是类的一个指针对象和对象数组。一个
12、对象的成员就是该对象的类所定义的数据成员(成员变量)和成员函数。访问对象的成员变量、成员函数和访问变量和函数的方法是一样的,只不过要在成员面前加上对象名和成员运算符”.”,例如:例 2 中的:xx.sc()。具体表示方式如下:.()例如:myMeter.m_nPercent,myMeter.SetPos(5),Meters0.StepIt();需要说明的是,一个类对象只能访问该类的公有型成员,而对于私有型成员则不能访问。上述成员 m_nPercent、SetPos()、StepIt()都是 public(公有)访问类型。若对象是一个指针,则对象的成员访问形式如下:-()例如(见例 4 所示):
13、Date*datel;/定义 Date 类的指针对象 datel=new Date(1998,4,28);/Date()是类 Date 中定义的构造函数,这里是执行构造函数,并为类/Date 开辟一片内存单元,且将这片内存单元的首地址赋给指针变量 datel。datel-showDate();/访问 Date 类的成员函数。5“-”是一个表示成员的运算符,它与“.”运算符的区别是:“-”用于表示指向对象的指针的成员,而“.”用于表示一般对象的成员。1 2 2 类及其成员变量与成员函数的声明和定义 类的定义格式一般可分为说明部分和实现部分。说明部分用来说明该类中的成员,包含数据成员的说明和成员函
14、数的说明。成员函数是用来对数据成员进行操作的,又称为“方法”。实现部分是对成员函数的定义。概括说来,说明部分是告诉使用者“做什么”,而实现部分则告诉使用者“怎么做”。类的一般定义格式如下:class public:公有数据成员的说明;公有成员函数的说明;protected:保护数据成员的说明;保护成员函数的说明;private:私有数据成员的说明;私有成员函数的说明;class是定义类的关键字,是用户定义的类的名字,通常用大写的 C 字母开始的标示符作为类名。花括号 内是类的说明部分,说明该类的成员。类的成员包含数据成员和成员函数两部分。public 称为类的公有部分,这部分的数据成员和成员函
15、数可由程序中的函数(包括类内和类外)访问,即它对外是完全开放的。private 称为类的私有部分,这一部分的数据成员和成员函数只能由本类的成员函数访问,而类外部的任何访问都是非法的。实现了访问权限的有效控制。protected 称为类的保护部分,这部分的数据成员和成员函数可以由本类的成员函数访问,也可以由本类的派生类的成员函数访问,而类外的任何访问都是非法的。即它是半隐蔽的。关键字 public、private和 protected被称为访问权限修饰符或访问控制修饰符。它们在类体内(即花括号 内)出现的先后顺序不限,并且允许多次出现,可用它们来说明类成员的访问权限。是类定义中的实现部分,这部分
16、包含所有在类体内说明的函数的定义,如例 2 中的:void student:sc();如果一个成员函数在类体内定义了,则实现部分将不再出现。如果所有的成员函数都在类体内定义,则实现部分可以省略。需要说明的是,当类的成员函数的函数体在类的外部定义时,必须由作用域运算符”:”来通知编译系统该函数所属的的类。为了进一步明确类的定义,除了例 2 外,我们再给出一个日期类定义的例子。例 3 定义日期类#include 6/类的说明部分 class Date public:/公有部分 void SetDate(int y,int m,int d);/说明为 year、month、day设置初值的函数 in
17、t IsLeapYear();/说明判别是否是闰年函数 void Print();/说明输出函数 private:/私有部分 int year,month,day;/说明用来表示年、月、日的整型变量;/类的实现部分 void Date:SetDate(int y,int m,int d)/为 year、month、day设置初值函数的实现 year=y;/年 month=m;/月 day=d;/日 /判别是否是闰年函数的实现,能被 4 整除与不能被 100整除或能被 400整除 int Date:IsLeapYear()return(year%4=0)&(year%100)!=0)|(year
18、%400=0);void Date:Print()/输出函数的实现 coutyear.month.dayendl;/输出年、月、日/主函数体 void main()Date da;/定义 Date类对象 da da.SetDate(2000,6,28);/执行类 Date的函数 SetDate(2000,6,28),参数为年、月、日 da.IsLeapYear();/执行类 Date的函数IsLeapYear()da.Print();/执行类 Print()函数 说 明:1、程序中出现的”:”是用来标示某个成员函数是属于哪个类的。该类还可以如下定义:class Date public:void
19、 SetDate(int y,int m,int d)year=y;month=m;day=d;int IsLeapYear()return(year%4=0)&(year%100)!=0)|(year%400=0);void Print()/输出函数体 coutyear.month.dayendl;private:int year,month,day;7 可以看出,程序中对成员函数的实现(即函数的定义)都写在了类体内,因此类的实现部分被省略了。2、在类体中不允许对所定义的数据成员进行初始化。3、类中的数据成员的类型可以是任意的,包括整型、浮点型、字符型、数组、指针、引用、无类型(void)以
20、及对象等。4、经常习惯地将类定义的说明部分或者整个定义部分(包含实现部分)放在一个头文件中。5、程序中的 cout叫输出流,它可以是一个整数、实数、字符及字符串,cout中的插入符”可以连续写多个,每个后面跟一个表达式,该表达式通常是获得输入值的变量或对象。若程序中有如下语句:int nNum1,nNum2,nNum3;cinnNum1nNum2nNum3;这两条语句是定义 3 个整型变量,并要求用户从键盘上输入 3 个数。输入时,必须在 3 个数值之间加上一些空格来分隔,空格的个数不限,最后按回车结束输入。1 2 3 构造函数和析构函数 构造函数和析构函数是在类体中说明的两种特殊的成员函数。
21、构造函数的功能是在创建对象时,使用给定的值将对象初始化;析构函数与构造函数正好相反,其功能是释放一个对象,在删除对象前,用它来做一些内存释放等清理工作。1、构造函数 由于在类的定义中不能对数据成员进行初始化,为了能给数据成员自动设置某些初 始值,需要使用构造函数。构造函数具有以下特征:(1)构造函数的名字与类名相同,否则编译程序将把它当作一般的成员函数来处理。(2)构造函数没有返回值。(3)构造函数的功能是对对象进行初始化,且一般只对数据成员进行初始化。在构造函数中一般不做赋初值以外的事情。(4)构造函数不能像其他成员函数那样被显示地调用,它是在对象创建时被调用的。(5)在一个类中可以定义多个
22、构造函数。例 4 定义构造函数#include class Date public:Date(int y,int m,int d);/构造函数 void setDate(int y,int m,int d);/一般的成员函数,设置日期函数 void showDate();/一般的成员函数,显示日期函数 private:int year;/私有成员变量,年 int month;/私有成员变量,月 int day;/私有成员变量,日;8 Date:Date(int y,int m,int d)/构造函数的实现 coutConstructing Function endl;year=y;/为 yea
23、r 赋值 month=m;/为 month 赋值 day=d;/为 day 赋值 void Date:setDate(int y,int m,int d)/一般成员函数,设置日期函数的实现 year=y;/为 year 赋值 month=m;/为 month 赋值 day=d;/为 day 赋值 inline void Date:showDate()/一般成员函数,显示日期函数的实现 coutyear.month.dayendl;/输出年、月、日 void main()Date*datel;/定义指针对象 Datel datel=new Date(1998,4,28);/构造函数,为 year
24、、month、day 赋初值 /以上两条语句可合成写:Date*datel=new Date(1998,4,28);coutDatel output1:showDate();/访问显示成员函数,显示构造函数所赋的年、月、日值 datel-setDate(2008,10,22);/访问设置日期函数,参数是年、月、日 coutDatel output2:showDate();/访问显示成员函数,显示 setDate()函数所赋的年、月、日值 delete datel;/释放datel所占用的内存空间 2、析构函数 与构造函数相对应的是析构函数。析构函数是另一个特殊的 C+成员函数,它只是在类名称前
25、面加上一个”符号。每一个类只有一个析构函数,没有任何参数,也不返回任何值。例如:class CMeter public:CMeter()/析构函数 析构函数只有在下列两种情况下才会被自动调用:(1)当对象定义在一个函数体中,该函数调用结束后,析构函数被自动调用。(2)用 new为对象分配动态内存,当使用 delete释放对象时,析构函数被自动调用。3、默认构造函数和析构函数 在类定义时,如果没有定义任何构造函数,则编译器自动生成一个不带参数的默认构造函数。同样,如果一个类中没有定义析构函数时,则编译系统也生成一个称为默认析构函数。例如,前面定义的 CMeter类来说,当没有定义任何构造函数和析
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC _Visual_C 程序 建立 13958
限制150内