C语言面向对象程序设计_第1页
C语言面向对象程序设计_第2页
C语言面向对象程序设计_第3页
C语言面向对象程序设计_第4页
C语言面向对象程序设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、编辑课件面向对象程序设计面向对象程序设计 C+程序设计语言程序设计语言主讲:陈泽琳主讲:陈泽琳面向对象程序设计面向对象程序设计学时安排:学时安排: 上课学时:上课学时:24 上机学时:上机学时:16参考资料:参考资料:(美)H.M.Deitel等著,薛万鹏等译,“C+程序设计教程”郑莉等编著, “C+语言程序设计”钱能主编, “C+程序设计教程”刘路放编著, “Visual C+与面向对象程序设计教程”杜建成等编著, “C+简明教程”.面向对象程序设计面向对象程序设计课程学习的目标:课程学习的目标: 学习学习C+程序设计语言,程序设计语言, 掌握面向对象程序设计方法。掌握面向对象程序设计方法。

2、课程学习的要求:课程学习的要求: 预习,通过例子了解概念,编程上机实践。预习,通过例子了解概念,编程上机实践。面向对象程序设计面向对象程序设计课程大纲:课程大纲:1. 类类(Class)2. 构造函数和析构函数构造函数和析构函数(Constructor & Destructor)3. 静态成员和友元静态成员和友元(Static Member & Friends)4. 继承与多态性继承与多态性(Inheritance & Polymorphism)5. 运算符重载运算符重载(Operator Overloading)6. I/O流与文件流与文件(I/O Stream &a

3、mp; File)7. 模板(模板(Template)、异常处理)、异常处理8. MFC类库及程序框架类库及程序框架9. 面向对象程序设计(面向对象程序设计(Object-oriented programming)面向对象程序设计面向对象程序设计C程序复习程序复习 (函数、参数、指针、引用、执行过程与程序)(函数、参数、指针、引用、执行过程与程序)讲课内容的一点说明讲课内容的一点说明: : 书的内容写的很细书的内容写的很细, , 讲课时先讲主要内容讲课时先讲主要内容, , 通过例子理解通过例子理解, , 在此过程中主要学习编程序在此过程中主要学习编程序, , 最后再补充最后再补充C+C+的细节

4、规则。的细节规则。课件中的约定课件中的约定:基础内容基础内容重点内容重点内容*难点内容难点内容*需要注意的内容需要注意的内容#应多练习的内容应多练习的内容#面向对象程序设计面向对象程序设计1. 类类(class)1.1 类的概念类的概念面向对象程序设计面向对象程序设计问题问题: (例例1-1)编写一个时钟的程序,程序可以设置时、分、秒,编写一个时钟的程序,程序可以设置时、分、秒,可以判断设置的时间是否合理(时:可以判断设置的时间是否合理(时:0-23,分:,分:0-59,秒:秒:0-59),显示时间。),显示时间。 什么是类什么是类? 类是一种用户定义的数据类型类是一种用户定义的数据类型面向对

5、象程序设计面向对象程序设计C 语言程序(结构化程序设计方法) :#include struct Time int hour;int minute;int second;struct Time standart_time;main() set_time(18,20,30);show_time();void set_time(int h, int m, int s)standart_time.hour = (h = 0 & h = 0 & m = 0 & s 60)? s: 0;void show_time()cout standart_time.hour”:” stand

6、art_time.minute”:” standart_time.secondendl;C语言程序(结构化程序设计方法):#include struct Time int hour;int minute;int second;struct Time standard_time;main() set_time(18,20,30);show_time();void set_time(int h, int m, int s)standard_time.hour = (h = 0 & h = 0 & m = 0 & s 60)? s: 0;void show_time()cou

7、t standard_time.hour: standard_time.minute: standard_time.secondendl;面向对象程序设计面向对象程序设计C+语言程序(面向对象程序设计)#include class Time private:int hour;int minute;int second;public:void set_time(int , int , int);void show_time();void Time:set_time(int h, int m, int s)hour = (h = 0 & h = 0 & m = 0 & s

8、60)? s: 0;void Time:show_time()cout hour:minute: secondendl;面向对象程序设计面向对象程序设计Time standard_time;main() standard_time .set_time(18,20,30);standard_time .show_time(); 看上去只是写法不同,实际上在面向对象程序设计中,class, set_time(), show_time()是一个整体, 是可以独立于main()主函数, 也可以看成是对象的描述(注意这里的对象与后面要讲的对象一词意思不同, 以后会详细介绍), 即面向对象。 而结构化程序

9、设计中, 只能将问题划分为一个个函数模块, 哪些函数模块可以描述一个子问题或一个对象, 程序中无法表示。 因此以上两个程序是有本质区别的, 面向对象程序设计可以将描述完整的子问题提供给他人, 同时还能保护自己的程序不被他人乱改, 多个面向对象子程序还可以象搭积木一样组合成大的面向对象程序, 程序设计可以象生产汽车标准零件一样形成大规模生产, 而这些在结构化程序设计中都很难做到。面向对象程序设计面向对象程序设计为什么用类为什么用类: 可以实现面向对象的程序设计可以实现面向对象的程序设计 即代码可以重用并受到保护即代码可以重用并受到保护类是实现面向对象程序设计的基本工具类是实现面向对象程序设计的基

10、本工具下面我们一步步地介绍关于类的定义、用类进行下面我们一步步地介绍关于类的定义、用类进行面向对象程序设计的方法面向对象程序设计的方法面向对象程序设计面向对象程序设计 class 类名类名 数据成员数据成员(data members); . 成员函数成员函数(member functions); ;类的定义类的定义: :面向对象程序设计面向对象程序设计class 类名类名 public : 公有段成员公有段成员 ; protected : 保护段成员保护段成员 ; private : 私有段成员私有段成员 ; ;面向对象程序设计面向对象程序设计面向对象程序设计面向对象程序设计说明:说明:1.

11、类名的第一个字母一般大写类名的第一个字母一般大写;2. 无论是数据成员无论是数据成员,还是成员函数还是成员函数,都可用三个访问控制都可用三个访问控制 关键字说明关键字说明: public、protected、private;3. 默认情况是默认情况是private;4. 说明为说明为private的数据成员的数据成员, 其他对象不可访问的其他对象不可访问的;5. 类是一种类型的定义,不分配存储空间;类是一种类型的定义,不分配存储空间;面向对象程序设计面向对象程序设计再看一个例子:(例再看一个例子:(例1-2) 描述人的信息:姓名、出生日、籍贯等描述人的信息:姓名、出生日、籍贯等 其成员函数有:

12、设置姓名、出生日、籍贯等;其成员函数有:设置姓名、出生日、籍贯等; 显示姓名、出生日、籍贯等显示姓名、出生日、籍贯等如要增加人的其他信息,学历、党派等,可以在类中如要增加人的其他信息,学历、党派等,可以在类中增加这些数据成员;还可以增加处理增加这些数据成员;还可以增加处理这些数据成员的成员函数这些数据成员的成员函数面向对象程序设计面向对象程序设计class Human public:Human();display(); private:char name10;struct int year;int month;int date;birthday;char history20;面向对象程序设计面

13、向对象程序设计有成员函数和无成员函数有成员函数和无成员函数;成员的隐蔽和成员的公开成员的隐蔽和成员的公开;类与结构的区别类与结构的区别:面向对象程序设计面向对象程序设计如何定义类成员如何定义类成员:数据成员;成员函数的声明:数据成员;成员函数的声明声明(或说明)声明(或说明)定义定义说明说明:1. 所有类定义中声明的成员函数都要定义其成员函数的实现所有类定义中声明的成员函数都要定义其成员函数的实现; 2. 在类中定义成员函数在类中定义成员函数, 默认为内联函数默认为内联函数;(小函数小函数,执行效率高执行效率高);3. 在类之外定义成员函数在类之外定义成员函数, 函数名必须为函数名必须为 类名

14、类名:成员函数名成员函数名()4. 非成员函数的全称为非成员函数的全称为 :函数名函数名 (不会引起出错时可省略不会引起出错时可省略:)1.2 类成员的定义类成员的定义:称为作用域运算符称为作用域运算符面向对象程序设计面向对象程序设计例1-3(在类的内部定义成员函数)#include class Time public:void set_time(int h, int m, int s)hour = (h = 0 & h = 0 & m = 0 & s 60)? s: 0;void show_time()cout hour:minute: secondendl; pro

15、tected:int hour;int minute;int second;面向对象程序设计面向对象程序设计(在类的外部定义成员函数)#include class Time public:void set_time(int , int , int);void show_time(); protected:int hour;int minute;int second;void Time:set_time(int h, int m, int s)hour = (h = 0 & h = 0 & m = 0 & s 60)? s: 0;void Time:show_time()

16、cout hour: minute: secondendl;面向对象程序设计面向对象程序设计类成员的保护类成员的保护: : (即对象成员的访问限制)(即对象成员的访问限制)类成员为public, 则任何函数可以访问,提供给外部的接口; 为protected, 则自己类的成员函数 和派生类的成员函数可以访问; 为private, 则只能被自己类的成员函数访问。注: 访问包括赋值和引用, a.birthday.year = 1998; cout 成员访问说明符:成员访问说明符:public:、:、protected:、:、private:面向对象程序设计面向对象程序设计 除了全局变量赋

17、初值除了全局变量赋初值, C及及C+的变量访问的变量访问都是在函数中完成的都是在函数中完成的 类的数据成员的访问也是在成员函数或类的数据成员的访问也是在成员函数或一般函数中完成的一般函数中完成的(一般函数只能访问一般函数只能访问public数据数据)函数中访问数据(类的数据成员)函数中访问数据(类的数据成员)函数调用函数函数调用函数面向对象程序设计面向对象程序设计例例1-4class Test public:void putpuba(int);int puba;protected:void putproa(int);int proa;private:void putpria(int);int

18、pria;面向对象程序设计面向对象程序设计void Test:putpuba(int a)puba = a;proa = a;pria = a;cout in putpuba()endl;cout puba is puba ; ;cout proa is proa ; ;cout pria is pria ; endl;/类成员函数可以访问自己的保护成员和私有成员putproa(a+1);putpria(a+2); cout end of putpuba() endl;面向对象程序设计面向对象程序设计void Test:putproa(int a)puba = a;proa = a;pria

19、= a;cout in putproa()endl;cout puba is puba ; ;cout proa is proa ; ;cout pria is pria ; endl;/访问自己的私有成员putpria(a+3); coutend of putproa()endl;面向对象程序设计面向对象程序设计void Test:putpria(int a)puba = a;proa = a;pria = a;cout in putpria()endl;cout puba is puba ; ;cout proa is proa ; ;cout pria is pria ; endl;/访

20、问自己的保护成员 putproa()中的putpria()与下一函数调用/只能执行一个,否则循环调用/putproa(a+1); coutend of putpria() endl;面向对象程序设计面向对象程序设计void main() int a=1,b=2,c=3;Test obj;obj.puba = 10; cout in main(), puba = obj.puba endl;/a = 20; error: proa is protected member/obj.pria = 30; error: pria is private memberobj.putpuba(

21、a);/obj.putproa(b); error: putproa() is protected member /obj.putpria(c); error: putpria() is private membercout endendl;面向对象程序设计面向对象程序设计 类定义的类定义的public段是类的对外接口段是类的对外接口, 可以被外部访问,而可以被外部访问,而protected可以被派生类访问。可以被派生类访问。 若类需修改,只需修改类的内部程序和保护或私有数据,若类需修改,只需修改类的内部程序和保护或私有数据,而类的对外接口不变,即公共成员函数的功能、名字、而类的对外接口不变,

22、即公共成员函数的功能、名字、参数不变,则不需改外部应用程序。参数不变,则不需改外部应用程序。类成员保护的好处:类成员保护的好处: 由此可以建立搭建应用程序的基础块,这些块由此可以建立搭建应用程序的基础块,这些块是通用的和安全的是通用的和安全的例子见书例子见书p250-251面向对象程序设计面向对象程序设计问题问题:类中定义的类中定义的public数据成员与全局变量的区别数据成员与全局变量的区别?不同之处不同之处:若类的对象是全局的若类的对象是全局的,则访问都是整个程序则访问都是整个程序但类的但类的public数据成员要通过数据成员要通过对象对象访问访问类中成员类中成员: 每定义一个对象则生成一

23、个该成员的变量每定义一个对象则生成一个该成员的变量全局变量只有一个全局变量只有一个作用域作用域: 类中成员类中成员:由对象变量的作用域决定由对象变量的作用域决定 全局变量全局变量:整个程序整个程序面向对象程序设计面向对象程序设计什么是对象什么是对象: : 对象是类类型的变量。对象是类类型的变量。类成员类成员protected:public:private:定义对象时定义对象时,为每个为每个数据成员分配空间数据成员分配空间,为每个成员函数建立为每个成员函数建立入口地址入口地址(即函数指针、即函数指针、函数参数和函数返回值函数参数和函数返回值)this*1.3 对象对象通过对象访问类的成员通过对象

24、访问类的成员人、车、动物等是一些抽象的概念,人、车、动物等是一些抽象的概念,每个抽象的概念有它的特征,每个抽象的概念有它的特征,这就好像是类。这就好像是类。对象是抽象类的实例,即当变量存放一个值时,对象是抽象类的实例,即当变量存放一个值时,这个值就是一个特定的人或车或动物等,不再是抽象的概念了。这个值就是一个特定的人或车或动物等,不再是抽象的概念了。面向对象程序设计面向对象程序设计例例1-5/本文件名为 class1.h(关于多文件编译,见上机指导)class Humanpublic:void assignhuman(char *, char *, char *); /赋予对象属性void d

25、isplay(); /显示某个人的信息int updatecorp(char * corperation); /修改某个人的工作单位protected:char name40; /存放姓名的数组struct int year; int month; int date;birthday; /存放生日的结构型变量char corperation100; /存放工作单位的数组;面向对象程序设计面向对象程序设计/本文件名为 class1.cpp#include #include #include /atoi()#include class1.hvoid Human:assignhuman(char *

26、np, char *bp, char *cp)char temp5;strcpy(name,np);strncpy(temp,bp,4); temp4=0;birthday.year = atoi(temp);strncpy(temp,bp+5,2); temp2=0; birthday.month = atoi(temp);strncpy(temp,bp+8,2); temp2=0;birthday.date = atoi(temp);strcpy(corperation,cp);void Human:display()cout A person info: endl;coutname bi

27、rthday.year/birthday.month/birthday.date corperationendl;int Human:updatecorp(char *cp)strcpy(corperation,cp);return 0;面向对象程序设计面向对象程序设计/本文件名为 main.cpp#include #include #include #include class1.hvoid main() Human zhang; Human classmates10; int i; char name20, birthday11, corp50; zhang.assignhuman(zha

28、ng ming, 1972/10/12,SCUT); zhang.display();(接下一页接下一页)name:birthday:corperation:zhangname:birthday:corperation:name:birthday:corperation:name:birthday:corperation:classmanes0classmanes1classmanes9iname0-19birthday0-10corp0-49对象存储空间分配示意图对象存储空间分配示意图:面向对象程序设计面向对象程序设计for (i=0;i2;i+) cout Please input a p

29、erson info: name, birthday, corperation namebirthdaycorp;cout name birthday corpendl;if (!strchr(birthday,/)/检查输入的生日中是否包含/cout Input error. endl;elseclassmatesi.assignhuman(name,birthday,corp);for (i=0;i成员函数名成员函数名();不同类的成员函数可同名不同类的成员函数可同名, 实际为不同的函数实际为不同的函数普通函数的调用与在普通函数的调用与在C语言中的调用相同语言中的调用相同 见例子见例子1-

30、6中的中的readpeople()可替换为可替换为display()面向对象程序设计面向对象程序设计例1-6/用引用调用成员函数#include #include #include #include class1.hvoid readhuman(Human &); /是普通函数的声明void main()Human zhang;Human classmates10;int i;zhang.assignhuman (zhang ming, 1972/10/12,SCUT);zhang.display();cout endl; / !该语句是错误的, 因数据成员name

31、是被保护的 / !不能在普通函数中访问for (i=0;i2;i+) readpeople(classmatesi); /调用函数readpeople(classmatesi)for (i=0;i2;i+)classmatesi.display();classmates1.updatecorp(HP);classmates1.display();面向对象程序设计面向对象程序设计void readpeople(Human & pp) /pp是引用类型, 即对象的别名char name20, birthday11, corp50;cout Please input a person inf

32、o: name, birthday, corperation namebirthdaycorp;cout name birthday corpendl;if (!strchr(birthday,/) cout Input error. endl;else pp.assignhuman(name,birthday,corp);/用引用调用成员函数readpeople(Human &)可改名为display(Human &)面向对象程序设计面向对象程序设计例1-7/用对象指针调用成员函数#include #include #include #include class1.hvoid readpeople(Human *);/普通函数声明; 参数为指向Human类的指针void main()Human zhang;Human classmates10;int i;zhang.assignhuman (zhang ming, 1972/10/12,SCUT);zhang.display();for (i=0;i2;i+) readpeople(&classmatesi);for (i=0;i2;i+)classmatesi.display();classmates1.updatecorp(HP);classmates1.display()

温馨提示

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

评论

0/150

提交评论