版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计C++程序设计语言主讲:陈泽琳C语言面向对象程序设计1全文共41页,当前为第1页。学时安排:上课学时:24
上机学时:16参考资料:(美)H.M.Deitel等著,薛万鹏等译,“C++程序设计教程”郑莉等编著,“C++语言程序设计”钱能主编,“C++程序设计教程”刘路放编著,“VisualC++与面向对象程序设计教程”杜建成等编著,“C++简明教程”...C语言面向对象程序设计1全文共41页,当前为第2页。课程学习的目标:学习C++程序设计语言,掌握面向对象程序设计方法。课程学习的要求:预习,通过例子了解概念,编程上机实践。C语言面向对象程序设计1全文共41页,当前为第3页。课程大纲:1.类(Class)2.构造函数和析构函数(Constructor&Destructor)3.静态成员和友元(StaticMember&Friends)4.继承与多态性(Inheritance&Polymorphism)5.运算符重载(OperatorOverloading)6.I/O流与文件(I/OStream&File)7.模板(Template)、异常处理8.MFC类库及程序框架9.面向对象程序设计(Object-orientedprogramming)C语言面向对象程序设计1全文共41页,当前为第4页。C程序复习(函数、参数、指针、引用、执行过程与程序)讲课内容的一点说明:
书的内容写的很细,讲课时先讲主要内容,
通过例子理解,在此过程中主要学习编程序,
最后再补充C++的细节规则。课件中的约定:
基础内容 重点内容* 难点内容** 需要注意的内容#
应多练习的内容##C语言面向对象程序设计1全文共41页,当前为第5页。1.类(class)1.1类的概念面向对象程序设计问题:(例1-1)编写一个时钟的程序,程序可以设置时、分、秒,可以判断设置的时间是否合理(时:0-23,分:0-59,秒:0-59),显示时间。
什么是类?
类是一种用户定义的数据类型C语言面向对象程序设计1全文共41页,当前为第6页。C语言程序(结构化程序设计方法):#include<iostream.h>structTime{ inthour;
intminute;
intsecond;};structTimestandard_time;main(){ set_time(18,20,30); show_time();}voidset_time(inth,intm,ints){ standard_time.hour=(h>=0&&h<24)?h:0; standard_time.minute=(m>=0&&m<60)?m:0; standard_time.second=(s>=0&&s<60)?s:0;}voidshow_time(){cout<<standard_time.hour<<":"<<standard_time.minute<<":"<<standard_time.second<<endl;}C语言面向对象程序设计1全文共41页,当前为第7页。C++语言程序(面向对象程序设计)#include<iostream.h>classTime{
private: inthour; intminute; intsecond;
public:
voidset_time(int,int,int); voidshow_time();};voidTime::set_time(inth,intm,ints){ hour=(h>=0&&h<24)?h:0; minute=(m>=0&&m<60)?m:0; second=(s>=0&&s<60)?s:0;}voidTime::show_time(){cout<<hour<<":"<<minute<<":"<<second<<endl;}C语言面向对象程序设计1全文共41页,当前为第8页。Timestandard_time;main(){
standard_time.set_time(18,20,30);
standard_time.show_time();}
看上去只是写法不同,实际上在面向对象程序设计中,class,set_time(),show_time()是一个整体,是可以独立于main()主函数,也可以看成是对象的描述(注意这里的对象与后面要讲的对象一词意思不同,以后会详细介绍),即面向对象。而结构化程序设计中,只能将问题划分为一个个函数模块,哪些函数模块可以描述一个子问题或一个对象,程序中无法表示。因此以上两个程序是有本质区别的,面向对象程序设计可以将描述完整的子问题提供给他人,同时还能保护自己的程序不被他人乱改,多个面向对象子程序还可以象搭积木一样组合成大的面向对象程序,程序设计可以象生产汽车标准零件一样形成大规模生产,而这些在结构化程序设计中都很难做到。C语言面向对象程序设计1全文共41页,当前为第9页。为什么用类:可以实现面向对象的程序设计即代码可以重用并受到保护类是实现面向对象程序设计的基本工具下面我们一步步地介绍关于类的定义、用类进行面向对象程序设计的方法C语言面向对象程序设计1全文共41页,当前为第10页。class类名
{
数据成员(datamembers);...
成员函数(memberfunctions);};类的定义:C语言面向对象程序设计1全文共41页,当前为第11页。class
类名
{
public:
公有段成员;protected:
保护段成员;
private:
私有段成员;};C语言面向对象程序设计1全文共41页,当前为第12页。面向对象程序设计说明:1.类名的第一个字母一般大写;2.无论是数据成员,还是成员函数,都可用三个访问控制关键字说明:public、protected、private;3.默认情况是private;4.说明为private的数据成员,其他对象不可访问的;5.类是一种类型的定义,不分配存储空间;C语言面向对象程序设计1全文共41页,当前为第13页。再看一个例子:(例1-2)描述人的信息:姓名、出生日、籍贯等其成员函数有:设置姓名、出生日、籍贯等; 显示姓名、出生日、籍贯等如要增加人的其他信息,学历、党派等,可以在类中 增加这些数据成员;还可以增加处理 这些数据成员的成员函数C语言面向对象程序设计1全文共41页,当前为第14页。classHuman{public:
Human();
display();
private:
charname[10];
struct{ intyear;
intmonth;
intdate;
}birthday;
charhistory[20];};C语言面向对象程序设计1全文共41页,当前为第15页。有成员函数和无成员函数;成员的隐蔽和成员的公开;类与结构的区别:C语言面向对象程序设计1全文共41页,当前为第16页。如何定义类成员:数据成员;成员函数的声明 声明(或说明) 定义说明:1.所有类定义中声明的成员函数都要定义其成员函数的实现;2.在类中定义成员函数,默认为内联函数;(小函数,执行效率高);3.在类之外定义成员函数,函数名必须为类名::成员函数名()4.非成员函数的全称为::函数名
(不会引起出错时可省略::)1.2类成员的定义::称为作用域运算符C语言面向对象程序设计1全文共41页,当前为第17页。例1-3(在类的内部定义成员函数)#include<iostream.h>classTime{ public: voidset_time(inth,intm,ints) { hour=(h>=0&&h<24)?h:0; minute=(m>=0&&m<60)?m:0; second=(s>=0&&s<60)?s:0; } voidshow_time() { cout<<hour<<":"<<minute<<":"<<second<<endl; } protected: inthour; intminute; intsecond;};C语言面向对象程序设计1全文共41页,当前为第18页。(在类的外部定义成员函数)#include<iostream.h>classTime{ public: voidset_time(int,int,int); voidshow_time(); protected: inthour; intminute; intsecond;
};voidTime::set_time(inth,intm,ints){ hour=(h>=0&&h<24)?h:0; minute=(m>=0&&m<60)?m:0; second=(s>=0&&s<60)?s:0;}voidTime::show_time(){cout<<hour<<":"<<minute<<":"<<second<<endl;}C语言面向对象程序设计1全文共41页,当前为第19页。类成员的保护:(即对象成员的访问限制)类成员为public,则任何函数可以访问,提供给外部的接口;
为protected,则自己类的成员函数和派生类的成员函数可以访问;
为private,则只能被自己类的成员函数访问。注:访问包括赋值和引用,a.birthday.year=1998;cout<<成员访问说明符:public:、protected:、private:C语言面向对象程序设计1全文共41页,当前为第20页。
除了全局变量赋初值,C及C++的变量访问都是在函数中完成的
类的数据成员的访问也是在成员函数或一般函数中完成的(一般函数只能访问public数据)函数中访问数据(类的数据成员)函数调用函数C语言面向对象程序设计1全文共41页,当前为第21页。例1-4classTest{public: voidputpuba(int); intpuba;protected: voidputproa(int); intproa;private: voidputpria(int); intpria;};C语言面向对象程序设计1全文共41页,当前为第22页。voidTest::putpuba(inta){ puba=a; proa=a; pria=a; cout<<"inputpuba()"<<endl; cout<<"pubais"<<puba<<";"; cout<<"proais"<<proa<<";"; cout<<"priais"<<pria<<";"<<endl; //类成员函数可以访问自己的保护成员和私有成员
putproa(a+1); putpria(a+2);cout<<"endofputpuba()"<<endl;}C语言面向对象程序设计1全文共41页,当前为第23页。voidTest::putproa(inta){ puba=a; proa=a; pria=a; cout<<"inputproa()"<<endl; cout<<"pubais"<<puba<<";"; cout<<"proais"<<proa<<";"; cout<<"priais"<<pria<<";"<<endl; //访问自己的私有成员
putpria(a+3);cout<<"endofputproa()"<<endl;}C语言面向对象程序设计1全文共41页,当前为第24页。voidTest::putpria(inta){ puba=a; proa=a; pria=a; cout<<"inputpria()"<<endl; cout<<"pubais"<<puba<<";"; cout<<"proais"<<proa<<";"; cout<<"priais"<<pria<<";"<<endl; //访问自己的保护成员putproa()中的putpria()与下一函数调用
//只能执行一个,否则循环调用
//putproa(a+1); cout<<"endofputpria()"<<endl;}C语言面向对象程序设计1全文共41页,当前为第25页。voidmain(){ inta=1,b=2,c=3; Testobj; obj.puba=10;cout<<"inmain(),puba="<<obj.puba<<endl; //a=20;error:proaisprotectedmember //obj.pria=30;error:priaisprivatemember obj.putpuba(a); //obj.putproa(b);error:putproa()isprotectedmember //obj.putpria(c);error:putpria()isprivatemember cout<<"end"<<endl;}C语言面向对象程序设计1全文共41页,当前为第26页。
类定义的public段是类的对外接口,可以被外部访问,而protected可以被派生类访问。若类需修改,只需修改类的内部程序和保护或私有数据,而类的对外接口不变,即公共成员函数的功能、名字、参数不变,则不需改外部应用程序。类成员保护的好处:
由此可以建立搭建应用程序的基础块,这些块是通用的和安全的例子见书p250-251C语言面向对象程序设计1全文共41页,当前为第27页。问题:类中定义的public数据成员与全局变量的区别?不同之处:若类的对象是全局的,则访问都是整个程序但类的public数据成员要通过对象访问类中成员:每定义一个对象则生成一个该成员的变量全局变量只有一个作用域:类中成员:由对象变量的作用域决定全局变量:整个程序C语言面向对象程序设计1全文共41页,当前为第28页。什么是对象:对象是类类型的变量。类成员protected:public:private:定义对象时,为每个数据成员分配空间,为每个成员函数建立入口地址(即函数指针、函数参数和函数返回值)this*1.3对象通过对象访问类的成员人、车、动物等是一些抽象的概念,每个抽象的概念有它的特征,这就好像是类。对象是抽象类的实例,即当变量存放一个值时,这个值就是一个特定的人或车或动物等,不再是抽象的概念了。C语言面向对象程序设计1全文共41页,当前为第29页。例1-5//本文件名为class1.h (关于多文件编译,见上机指导)classHuman{public: voidassignhuman(char*,char*,char*);//赋予对象属性
voiddisplay(); //显示某个人的信息
intupdatecorp(char*corperation);//修改某个人的工作单位protected: charname[40];//存放姓名的数组
struct{ intyear; intmonth; intdate; }birthday;//存放生日的结构型变量
charcorperation[100];//存放工作单位的数组};C语言面向对象程序设计1全文共41页,当前为第30页。//本文件名为class1.cpp#include<iostream.h>#include<string.h>#include<stdlib.h> //atoi()#include"class1.h"voidHuman::assignhuman(char*np,char*bp,char*cp){ chartemp[5]; strcpy(name,np); strncpy(temp,bp,4);temp[4]='\0'; birthday.year=atoi(temp); strncpy(temp,bp+5,2);temp[2]='\0'; birthday.month=atoi(temp); strncpy(temp,bp+8,2);temp[2]='\0'; birthday.date=atoi(temp); strcpy(corperation,cp);}voidHuman::display(){ cout<<"Apersoninfo:"<<endl; cout<<name<<""<<birthday.year<<'/'<<birthday.month<< '/'<<birthday.date<<""<<corperation<<endl;}intHuman::updatecorp(char*cp){ strcpy(corperation,cp); return0;}C语言面向对象程序设计1全文共41页,当前为第31页。//本文件名为main.cpp#include<iostream.h>#include<string.h>#include<stdlib.h> #include"class1.h"voidmain(){Humanzhang;Humanclassmates[10];inti;charname[20],birthday[11],corp[50];zhang.assignhuman("zhangming","1972/10/12","SCUT");zhang.display();(接下一页)name:birthday:corperation:zhangname:birthday:corperation:name:birthday:corperation:…name:birthday:corperation:classmanes[0]classmanes[1]classmanes[9]iname[0-19]birthday[0-10]corp[0-49]对象存储空间分配示意图:C语言面向对象程序设计1全文共41页,当前为第32页。 for(i=0;i<2;i++){ cout<<"Pleaseinputapersoninfo:name,birthday,corperation"<<endl; cin>>name>>birthday>>corp; cout<<name<<""<<birthday<<""<<corp<<endl; if(!strchr(birthday,‘/’)) //检查输入的生日中是否包含‘/’ cout<<"Inputerror."<<endl; else
classmates[i].assignhuman(name,birthday,corp); } for(i=0;i<2;i++)
classmates[i].display();
classmates[1].updatecorp("HP");
classmates[1].display();}(接上一页)说明:对象zhang,调用成员函数赋值并显示;
对象数组classmates[10],调用成员函数赋值并显示C语言面向对象程序设计1全文共41页,当前为第33页。调用成员函数:对象名.成员函数名();引用对象名.成员函数名();对象指针->成员函数名();不同类的成员函数可同名,实际为不同的函数普通函数的调用与在C语言中的调用相同
见例子1-6中的readpeople()可替换为display()C语言面向对象程序设计1全文共41页,当前为第34页。例1-6//用引用调用成员函数#include<iostream.h>#include<string.h>#include<stdlib.h>#include"class1.h"voidreadhuman(Human&);//是普通函数的声明voidmain(){ Humanzhang; Humanclassmates[10]; inti; zhang.assignhuman("zhangming","1972/10/12","SCUT"); zhang.display(); cout<<<<endl;//!!该语句是错误的,因数据成员name是被保护的
//!!不能在普通函数中访问
for(i=0;i<2;i++) readpeople(classmates[i]);//调用函数readpeople(classmates[i]) for(i=0;i<2;i++) classmates[i].display(); classmates[1].updatecorp("HP"); classmates[1].display();}C语言面向对象程序设计1全文共41页,当前为第35页。voidreadpeople(Human&pp)//pp是引用类型,即对象的别名{ charname[20],birthday[11],corp[50]; cout<<"Pleaseinputapersoninfo:name,birthday,corperation"<<endl; cin>>name>>birthday>>corp; cout<<name<<""<<birthday<<""<<corp<<endl; if(!strchr(birthday,'/')) cout<<"Inputerror."<<endl; else
pp.assignhuman(name,birthday,corp); //用引用调用成员函数}readpeople(Human&)可改名为display(Human&)C语言面向对象程序设计1全文共41页,当前为第36页。例1-7//用对象指针调用成员函数#include<iostream.h>#include<string.h>#include<stdlib.h>#include"class1.h"voidreadpeople(Human*); //普通函数声明;参数为指向Human类的指针voidmain(){ Humanzhang; Humanclassmates[10]; inti; zhang.assignhuman("zhangming","1972/10/12","SCUT"); zhang.display(); for(i=0;i<2;i++) readpeople(&classmates[i]); for(i=0;i<2;i++) classmates[i].display(); classmates[1].updatecorp("HP");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络客服工作总结及时解答解决用户问题
- 食品行业食品安全培训总结
- AIDS抗病毒治疗课件
- 2025年全球及中国血流动力学监测解决方案行业头部企业市场占有率及排名调研报告
- 2025-2030全球新能源交流继电器行业调研及趋势分析报告
- 2025-2030全球刚性墙庇护所行业调研及趋势分析报告
- 2025年全球及中国游戏视频背景音乐行业头部企业市场占有率及排名调研报告
- 2025-2030全球滑移转向岩石拾取器行业调研及趋势分析报告
- 2025-2030全球甲氧氯普胺片行业调研及趋势分析报告
- 2025年全球及中国工业级硅酸钾行业头部企业市场占有率及排名调研报告
- 充电桩知识培训课件
- 2025年七年级下册道德与法治主要知识点
- 2025年交通运输部长江口航道管理局招聘4人历年高频重点提升(共500题)附带答案详解
- 老年髋部骨折患者围术期下肢深静脉血栓基础预防专家共识(2024版)解读
- 偏瘫足内翻的治疗
- 药企质量主管竞聘
- 信息对抗与认知战研究-洞察分析
- 心脑血管疾病预防课件
- 手术室专科护士工作总结汇报
- 2025届高三听力技巧指导-预读、预测
- 苏州市2025届高三期初阳光调研(零模)政治试卷(含答案)
评论
0/150
提交评论