版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章C++初步知识
第二章类和对象
第三章关于类和对象深入讨论
第四章运算符重载
第五章继承与派生
第六章多态性与虚函数
第七章输入输出流第1页第一章C++初步知识1.1从C到C++1.2C++语言词法和词法规则1.3最简单C++程序1.4C++对C扩充√1.5C++程序编写和实现第2页1.4C++对C扩充C++既可用于面向过程程序设计,也可用于面向对象程序设计。C++继承了C语言提供绝大部分功效和语法要求,并在此基础上作了扩充。第3页1.4.1C++输入和输出1.4.2用const定义常变量1.4.3函数原型申明1.4.4函数重载1.4.5函数模板1.4.6有默认参数函数第4页1.4.7变量引用1.4.8内置函数1.4.9作用域运算符1.4.10字符串变量1.4.11动态分配/回收内存运算符第5页作业5,6,7,10,11,13(改成用模板和变量引用设计)第6页第2章类和对象2.1面向对象程序设计方法概述2.2类申明和对象定义√2.3类组员函数√2.4对象组员引用(调用)√2.5类和对象简单应用2.6类封闭性和信息隐蔽第7页类定义格式:
class类名
{ private:
私有组员申明
public:
公有组员申明
protected:
保护组员申明
};class是保留字,申明类类型类名:按标识符取名。private、public、protected也是保留字,是组员访问限定符,其后必须跟冒号。在类申明}后如不直接定义对象就必须跟分号。第8页private:只能被本类中组员函数访问,类外(除友元外)不能访问。public:公有组员能够被本类组员函数访问,也能在类作用域范围内其它函数访问。protected:受保护组员可由本类组员函数访问,也能由派生类组员函数访问。 在定义类时,这三类组员不分前后次序,也能够重复出现。普通推荐最多出现一次。第9页例2.3类组员调用 #include<iostream> usingnamespacestd;
classTime {private: inthour; intminute; intsec;
public: voidset_time(); voidshow_time(); };第10页intmain(){Timet1;
t1.set_time();
t1.show_time();Timet2;t2.set_time();t2.show_time();return0;}第11页
voidTime::set_time() { cin>>hour; cin>>minute; cin>>sec; }
voidTime::show_time() { cout<<hour<<":"<<minute<<":"<<sec<<endl; }第12页多文件系统普通在面向对象程序开发时:将类申明(包含组员函数申明)放在指定头文件(*.h)中;把类组员函数定义放在源文件(*.cpp)中;在应用程序中只要把相关头文件包含进来即可。第13页作业P68习题5,6
第14页第3章关于类和对象深入讨论
本章将对类和对象进行深入讨论。 3.1构造函数√ 3.2析构函数√ 3.3调用构造函数和析构函数次序√ 3.4对象数组 3.5对象指针 3.6共用数据保护(难点) 3.7对象动态建立和释放 3.8对象赋值和复制 3.9静态成员 3.10友元 3.11类模板第15页3.1结构函数3.1.1对象初始化3.1.2结构函数作用3.1.3带参数结构函数3.1.4用参数初始化表初始化数据组员3.1.5结构函数重载3.1.6使用默认参数结构函数确定对象初始状态第16页3.1.2结构函数作用结构函数作用:用于为对象分配空间和进行初始化。结构函数特点:(1)结构函数名字与它类名必须相同;(2)它没有类型,不返回值,为public类型;(3)它能够带参数,也能够不带参数;(4)不需要写调用语句,在系统建立对象时由系统自觉调用执行。(5)假如用户没有定义结构函数,C++系统会自动生成一个空结构函数。第17页 #include<iostream> usingnamespacestd; classBox {public:
Box();
//不带形参结构函数为系统默认函数
Box(inth,intw,intlen):height(h),width(w),length(len){} intvolume(); private: intheight; intwidth; intlength; };这是什么?结构函数也能够重载。一个类能够有多个同名结构函数,函数参数个数、参数类型各不相同定义对象是只执行一个结构函数第18页 #include<iostream> usingnamespacestd; classBox {public:
Box(intw=10,inth=10,intlen=10); intvolume(); private: intheight; intwidth; intlength; };例3.4:将例3.3中结构函数改用带默认值参数,长、宽、高默认值都是10。假如在类外定义结构函数,应该在申明结构函数时指定默认参数值,在定义函数时能够不再指定默认参数值。第19页3.2析构函数作用:与结构函数相反,当对象生命周期结束时,系统自动调用析构函数,收回对象占用内存空间。析构函数特征 ①析构函数名以~符号开始后跟类名 ②析构函数没有数据类型、返回值、形参。因为没有形参所以析构函数不能重载。 ③假如程序员没有定义析构函数,C++编译系统会自动生成一个析构函数。第20页3.3调用结构函数和析构函数次序当定义多个对象时:先结构后析构,后结构先析构。对象1结构函数对象2结构函数对象1析构函数对象2析构函数第21页作业P116习题2,4,7.(1)(2),12
第22页第四章运算符重载
4.1什么是运算符重载
4.2运算符重载方法√
4.3重载运算符规则√
4.4运算符重载函数作为类组员函数和友元函数√
4.5重载双目运算符
4.6重载单目运算符
4.7重载流插入运算符和流提取运算符
第23页4.2运算符重载方法方法:定义一个重载运算符函数,在需要时系统自动调用该函数,完成对应运算。实质:函数重载。运算符重载函数格式:
函数类型operator运算符(形参表) {重载处理}
数据类型:是重载函数值数据类型。
operator是保留字
第24页4.3重载运算符规则(1)C++只允许重载已经有运算符。(2)不能重载运算符有五个。(3)重载不改变操作数个数。(4)重载不改变运算符优先级。(5)运算符重载函数不能带默认值参数。(6)运算符重载函数参数最少有一个自定义类型,能够是类对象或类对象引用。(7)运算符重载函数能够是类组员函数也能够是类友元函数,还能够是普通函数。第25页例4.2
classComplex {public: Complex(){real=0;imag=0;} Complex(doubler,doublei){real=r;imag=i;}//重载运算符+
Complexoperator+(Complex&c2);//类组员函数重载运算符 voiddisplay(); private: doublereal; doubleimag; };test14第26页#include<iostream.h>
classComplex {public:
Complex(){real=0;imag=0;}
Complex(doubler){real=r;imag=0;}
Complex
(doubler,doublei){real=r;imag=i;}
friendComplexoperator+(Complex&c1,Complex&c2);//类友元函数重载运算符 voiddisplay(); private: doublereal; doubleimag; };test14例4.3第27页作业P149习题2,4第28页第五章继承与派生面向对象程序设计有四个主要特点:
抽象(二、三章);
封装(二、三章);
继承(五章);
多态性(六章)。第29页5.1继承与派生概念√5.2派生类申明方式√5.3派生类组成√5.4派生类组员访问属性5.5派生类结构函数和析构函数5.6多重继承第30页继承与派生关系
类A是已存在类,在A基础上建立一个新类B:类A称为基类或父类,类B称作派生类或子类。子类从父类取得其已经有特征,这种现象称作类继承。父类产生子类,称作类派生。第31页5.2派生类申明方式派生类申明格式:
class派生类名:[继承方式]基类名
{派生类新增组员申明};继承方式包含:public、private(系统默认)、protected。举例: 已经申明一个基类student,在它基础上经过单继承建立一个增加了“年纪”派生类student1。第32页5.3派生类组成派生类中组员包含从基类继承过来组员和自己增加组员。组成部分派生类Student1组员类型接收组员数据组员num,name,sex基类组员组员函数display()//能够重载新增组员数据组员age派生类组员组员函数display_1()结构函数需重新定义第33页5.5.1简单派生类结构函数何为简单派生类?只有一个基类,只有一级派生;派生类数据组员中不包含基类对象(子对象)。结构函数格式:派生类名::派生类名(基类所需形参,本类组员所需形参):基类名(基类参数表){
本类组员初始化赋值语句;};说明:基类所需形参,基类参数表一一对应第34页例5.5简单派生类结构函数#include<iostream>#include<string> usingnamespacestd;classStudent//申明基类
{public://公用部分
Student(intn,stringnam,chars)//基类结构函数
{num=n; name=nam; sex=s;}
~Student(){}//基类析构函数
protected://保护部分
intnum; stringname; charsex;
};test51第35页
classStudent1:publicStudent//申明公用派生类
{public:
Student1(intn,stringnam,chars,inta,charad[]):Student(n,nam,s)
//派生类结构函数
{age=a;//只对派生类新增数据组员初始化
addr=ad; }voidshow();
private://派生类私有部分
intage; stringaddr; };执行结构函数次序是(析构函数相反):①派生类结构函数先调用基类结构函数;②再执行派生类结构函数本身。即先初始化num,name,sex,然后再初始化age和addr第36页5.6多重继承
5.6.1申明多重继承方法
5.6.2多重继承派生类结构函数
5.6.3多重继承引发二义性问题
5.6.4虚基类为何要用多重继承?如:定义一个沙发床类第37页5.6.3多重继承引发二义性问题
多重继承最常见问题是二义性问题。
二义性问题分类:在多重继承时,基类与派生类之间,或基类之间出现同名组员时,将出现访问时二义性(不确定性)——采取同名隐藏规则(5.6.3)来处理。当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中组员时,将产生二义性——采取虚基类(5.6.4)来处理。第38页同名隐藏规则当派生类与基类或基类之间有相同组员时,访问派生类中同名组员方法:派生类对象.同名组员名访问基类中被覆盖同名组员方法:派生类对象.基类名::同名组员名第39页1.虚基类作用作用派生类在继承间接共同基类时只保留一份组员,从而处理多层继承时可能发生对同一基类继承屡次而产生二义性问题。申明
class派生类名:virtual继承方式基类名,如:classA:virtualpublicN注意在第一级继承时就要将共同基类设计为虚基类第40页
类继承举例1:
classN
{public: inta; Voiddisplay() {cout<<“N::a=“<<a;} };图5.18
5.6.4虚基类第41页作业P193习题4,5,7①,8①第42页第六章多态性与虚函数
6.1多态性概念
6.2一个经典例子
6.3虚函数√
6.4纯虚函数与抽象类第43页虚函数作用虚函数突破了基类限制,在基类指针指向派生类对象后,就能调用派生类虚函数。从而实现了用同一个调用形式(如:pt->display(),pt是一个基类指针),能够调用同一类族中不一样类虚函数。这就是多态性,对同一消息,不一样对象有不一样响应方式。第44页
(1)在基类用virtual申明组员函数为虚函数。在派生类中重新定义同名函数,让它含有新功效。
(2)在派生类中重新定义此函数时,要求函数名、函数类型、参数个数和类型与基类虚函数相同,依据需要重新定义函数体。C++要求,当一个组员函数被申明为虚函数后,其派生类中同名函数自动成为虚函数。
(3)定义一个指向基类对象指针变量,并让它取得同一类族中某个对象地址。
(4)用该指针变量调用虚函数,调用就是该对象所属类虚函数。虚函数使用方法第45页例:虚函数使用方法#include<string>#include<iostream>usingnamespacestd;classbase{public:
virtualvoidFn(){cout<<“在基类内”<<endl;}};classsubclass:publicbase{public:
virtualvoidFn(){cout<<“在派生类内”<<endl;}};test20第46页voidtest(base&b){b.Fn();}intmain(){basebc;subclasssc;base*bsc=&bc;//目检测指针对象与虚函数共同作用效果bc=sc;//目检测一般对象与虚函数共同作用效果cout<<"n执行bc=sc后,调用test(bc)\n";test(bc);cout<<"\n调用test(bsc)\n";test(*bsc);bsc=≻//目检测指针对象与虚函数共同作用效果cout<<"执行bsc=&sc后,调用test(bsc)\n";test(*bsc);return0;}第47页运行结果:n执行bc=sc后,调用test(bc)在基类内调用test(bsc)在基类内执行bsc=&sc后,调用test(bsc)在派生类内Pressanykeytocontinue指针虚函数+=动态多态性第48页6.4纯虚函数与抽象类6.4.1纯虚函数6.4.2抽象类6.4.3应用实例第49页6.4.1纯虚函数何为纯虚函数只申明,不定义虚函数称为纯虚函数纯虚函数普通格式virtual函数类型函数名(参数表)=0;纯虚函数作用在许多情况下,基类中不能为虚函数给出一个有意义定义,而将它说明为纯虚函数,其作用是:为派生类提供一个一致接口(界面)。它定义留给派生类来做,派生类依据需要来定义各自实现。第50页6.4.2抽象类何为抽象类带有纯虚函数类是抽象类抽象类任务普通只描述这组子类共同操作接口,而完整实现留给子类。抽象类说明抽象类是一个特殊类,只能用作其它类基类,抽象类是不能定义对象。第51页作业P219习题2,3第52页7.1
C++输入和输出7.2
标准输出流√7.3
标准输入流√7.4文件操作与文件流7.5字符串流
第七章输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度企业并购顾问合同
- 2024年度知识产权许可合同关键要素
- 写字楼楼盘租赁合同范本
- 2024年度对讲机设备及解决方案提供合同
- 2024版设备租赁合同:某制造企业与某维修公司之间的协议
- 电子电器零售业态创新模式
- 解读人工智能在风险管理中的应用
- 二零二四年度劳动合同详细条款及标的
- 2024年度美发店装修设计合同
- 翻译合作合同范本
- 气象医疗——日干支断病刘玉山
- 三菱plc试题及答案
- 客房物品赔偿价目表修订版
- 智能手机应用及云上智农APP应用培训PPT课件
- 多导睡眠监测ppt
- 木家具产品出厂检验报告
- 生僻字歌词注拼音版本
- 湘教版九年级上册数学《第4章小结复习》课件
- 广成仪制药王正朝全集
- 【芝麻灰】石材检测报告
- 中国脑血管病防治指南+全文
评论
0/150
提交评论