谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第1页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第2页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第3页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第4页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

第一章 C+初步知识第一节 从C到c+一:c+的输入输出语句C+用cin和cout完成输入输出功能,c用scanf和printf二:c+用const定义常变量 C语言 #define PI 3.14 c+ const float pi=3.14三:c+函数原型声明四:c+函数的重载函数名相同,参数个数或类型,或函数返回值之中有不同的,用一个函数名实现不同的功能五:函数模板定义完函数模板,系统根据实际参数的类型赋给相应的形参形式 template (用T代替数据类型)六:c+有默认参数的函数七:变量的引用(别名)Int aInt & b=a; b是a的引用(别名),共同占用同一个内从 八:内置函数 不重要 九:运算符作用域: 以后见了再说十:字符串变量 C语言用字符数组表示字符串,c+本身就有string数据类型十一:动态分配内存C语言用 malloc函数 和 free函数C+用 new 函数 和 delete 函数第二章 类和对象 第一节 类的声明和对象的定义一:类和对象的关系二:类的声明Class 类名Public:Private:;三:对象的定义 1,先声明类再定义对象2,声明类的同时定义对象3,不出现类名直接定义对象 第二节 类的成员函数一:成员函数的作用调用数据成员二:在类外定义成员函数1,成员函数: 类型名 类名:成员函数名(参数表列)2,构造函数 类名:成员函数名(参数表列) 没有类型名是因为构造函数没有参数没有返回值三:inline成员函数四:成员函数的存储方式 不和数据成员在一起,独立存储,不同对象使用相同的成员函数,通过this指针区别不同的对象第三节 对象成员的引用一:通过对象名加成员运算符二:通过引用名加成员运算符三:通过指针访问第四节 类的特点一:抽象性 类和对象的关系: 类是对象的抽象,对象是类的具体二:封装性 公用接口和私有实现的分离(private public)三: 继承性 (第三章)四:多态性(第四章) 第三章 关于类和对象的进一步讨论第一节 对象的初始化(用构造函数)一:构造函数的定义 给对象初始化的函数叫做构造函数二:用构造函数初始化的方法1.默认构造函数2.初始化构造函数(可以用参数初始化表进行初始化)3.带默认参数的初始化构造函数三:调用构造函数的时间 定义 对象时自动调用构造函数 第二节 析构函数一:析构函数的作用 撤销对象之前的清理工作,或者清理前的最后操作二:调用析构函数的时间 对象撤销前自动调用析构函数 第三节 调用构造函数和析构函数的顺序一:先构造后析构,后构造先析构二:要考虑对象撤销的顺序 第四节 对象数组一:对象数组的定义 类名 对象数组名个数二:对象数组的初始化 例如 student stu【3】= Student(1001,18 89), Student(1002,19 79), Student(1003,18 81); 第五节 对象指针一:指向对象的指针定义对象时会为对象分配一定的内存空间,内存空间的起始地址就是该对象的指针 类名 * 指针变量名二:指向成员的指针 1,指向数据成员的指针 和定义普通变量指针一样 类型名 * 指针变量名 2,指向成员函数的指针指向普通函数的指针 类型名(* 指针变量名)(参数表列)指向成员函数的指针 类型名(类名:* 指针变量名)(参数表列)三:this指针 第六节 公用数据的保护一:常对象 1,声明方法:类名 const 对象名(实参表列)/常对象中的数据成员为常变量且必须要有初值2,特点 数据成员全部为const型,成员函数为非const型 类外不能调用该对象的飞const型的成员函数 Const型成员函数可以访问const型数据成员,但不能改变他们的值二:常对象成员 1,常数据成员(只能通过构造函数参数初始化表对其进行初始化) 2,常成员函数 (只能引用类中的数据成员,不能修改他们)三:指向对象的常指针四:指向常对象的指针五:对象的常引用 第七节 对象的动态建立和释放一:new建立动态对象指针名 = New 类名 返回值是个指针,分配成功时该指针指向非0数据,分配失败时该指针指向0 二:delete释放动态对象Delete 指针名 第八节 对象的赋值和赋值一:对象的赋值同类对象可以通过赋值运算符“=”进行赋值对象名2=对象名1二:对象的复制(用到复制构造函数1 类名 对象2(对象1)2 类名 对象2 = 对象1 第九节 静态成员一:静态数据成员 1,定义 用static声明的数据成员为静态数据成员 2,特点 静态数据成员不属于某个对象,独立分配单元,所有对象的静态数据成员相同并且都可以改变其值 3,初始化 只能在类体外进行初始化 数据类型 类名:静态数据成员名=初值 4,引用 既可以通过对象名引用,也可以通过类名引用二:静态成员函数(没有this指针) 作用:处理静态数据成员 第十节 友元一 :友元函数 1,普通函数声明为友元函数 2,成员函数声明为友元函数二:友元类 第十一节 模板一:函数模板Template 二:类模板 Template第四章 运算符重载 第一节 什么是运算符重载一: 函数重载 对一个已有的函数赋予新的含义(功能)即一名多意二: 运算符重载 赋予c+运算符新的意义第二节 运算符重载的方法一:方法 函数类型 operator 运算符名(形参列表)对运算符的操作二:说明 函数名为 operator 运算符名 第三节 重载运算符的规则一:不能创造运算符 只能重载c+已有运算符二:不能改变运算符个数三:优先级不能变四:结合性不能变五:不能有默认参数六:参数中至少有一个是类对象七:= & 不用重载,可直接用八:运算符重载函数可以是成员函数,友元函数,或都不是 第四节 运算符重载函数作为成员函数和友元函数一:做成员函数(少一个参数)二:做友元函数第五节 重载双目运算符举例第六节 重载单目运算符举例第七节 重载流插入运算符和流提取运算符一:重载流插入运算符 第八节 不用类型数据间的转换一:标准类型间的转换1,隐式转换 int a=3 a=a+4.42,显式转换 C标准 (类型名) 数据 C+标准 类型名 (数据)二:用转换构造函数进行类型转换1,作用 将一个其他类型的数据转换成一个指定类的对象2,特点 只有一个参数 可以转换标准类型也可以转换其他类成员3,举例 complex (double r) real=r;imag=0三:用类型转换函数进行类型转换1,作用 将一个类对象转换为其他类型的数据2,形式 operator 类型名() 实现转换的语句第五章 继承与派生第一节 继承与派生的概念一:继承和派生的概念 1,继承:在一个已有类的基础上建立一个新的类,新类从已有类哪里获得其已有的特性,这种现象就叫做类的继承; 2,派生:从一个已有类产生一个新类的过程叫做派生;二:继承的分类 1,单继承 (一个爹) 2,多重继承 (好几个爹)三:基类和派生类的关系 基类是派生类的抽象化,派生类是基类的具体化 第二节 派生类的声明方式一:单继承的派生类声明方式 Class 派生类名 :继承方式 基类名 派生类新增成员二:多重继承的派生类的声明方式 Class 派生类名:继承方式1 基类名1, 继承方式2 基类名2派生类新增成员 第三节 派生类的构成一:派生类的构成 1,基类成员 2,派生类新增成员二:派生类的生成步骤 1,从基类接受全部数据成员和成员函数 2,调整从基类接受的数据成员 3,声明派生类新增加的成员 第四节 派生类的访问属性一:公用继承(最常用) 基类成员的属性在派生类中不改变 二:私有继承 基类私有还是基类私有 基类共有和保护变为派生类私有三:保护继承 基类私有还是基类私有 基类共有和保护变为派生类保护四:多级派生时的访问属性 一级一级往下推就可 第五节 派生类的构造函数和析构函数一:简单派生类的构造函数派生类构造函数名(总参数表列):基类构造函数名(基类参数表列)派生类中新增数据成员初始化语句二 ;含有子对象的派生类的构造函数派生类构造函数名(总参数表列):基类构造函数名(参数表列),子对象名(参数表列)派生类中新增数据成员初始化语句三:多层派生时的构造函数派生类构造函数名(总参数表列):直接基类构造函数名(参数表列)派生类中新增数据成员初始化语句四:派生类构造函数的特殊形式 1,当不需要对派生类新增的成员进行任何初始化操作时,派生类构造函数体可以为空 2,如果在基类中没有定义构造函数,或定义了没有参数的构造函数,那么,在定义派生类自己的构造函数时可以不写基类的构造函数。五:派生类的析构函数 1,析构函数的声明方式 类名() 2,析构函数的顺序 先执行派生类自己的析构函数,在执行子对象的析构函数最后执行基类的析构函数第六节 多重继承一:声明多重继承的方法 Class 派生类名:继承方式 1 基类名1, 继承方式2 基类名2派生类新增成员二:多重继承派生类的构造函数 派生类名(总参数表列):基类1构造函数(参数表列),基类2构造函数(参数表列)派生类新增数据成员初始化语句三:多重继承引起的二义性问题 1,两个基类有同名成员2,两个基类和派生类有同名成员3,基类1和基类2都是从一个基类派生的四:虚基类1,虚基类的作用 在继承间接共同基类时只保留一份成员2,虚基类的声明方法 (在声明派生类时,不是声明基类声明) Class 派生类名:virtual 继承方式 基类名3,虚基类的初始化 (在最后的派生类中不仅要负责直接基类初始化,还要负责对虚基类初始化) 第七节 基类与派生类的转换一:派生类对象可以向基类对象赋值二:派生类对象可以向基类对象的引用赋值三:派生类对象可以代替基类对象做函数的实参;四:指向基类对象的指针可以指向派生类对象,但只是指向其中基类的那部分;(总之:派生类对象可以代替基类对象大材小用) 第八节 继承与组合一:定义 1,继承 :在一个已有类的基础上建立一个新的类,新类从已有类哪里获得其已有的特性,这种现象就叫做类的继承 2,组合 :在一个类中以另一个类的对象作为数据成员的,称为类的组合二:举例 第六章 多态性与虚函数 第一节 多态性的概念一:多态性的定义 1,c+的定义:具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。2,面向对象程序的定义:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。二:多态性的分类 1,静态多态性 编译时确定调用哪个函数,通过函数重载实现 2,动态多态性 运行时确定调用哪个函数,通过虚函数实现 第二节 典型例子#include class point public:point (float a=0,float b=0):x(a),y(b)void set_point(float a,float b);float get_x();float get_y();friend ostream & operator (ostream & output,point & pt);private:float x;float y;void point:set_point(float a,float b)x=a;y=b;float point:get_x()return x;float point:get_y()return y;ostream & operator (ostream & output,point & pt)outputpt.get_x(),pt.get_y()endl;return output;class circle : public pointpublic:circle ( float a=0,float b=0,float r=0):point(a,b),radius(r)void set_radius(float r);float get_radius();float area();friend ostream & operator (ostream & output,circle & pt);private:float radius;void circle:set_radius(float r)radius=r;float circle:get_radius()return radius;float circle:area()return 2*3.14*radius;ostream & operator (ostream & output,circle & pt)outputpt.get_x(),pt.get_y()r=pt.get_radius()endl;outputarea=pt.area()endl;return output;class cylinder : public circlepublic:cylinder ( float a=0,float b=0,float r=0,float h=0):circle(a,b,r),heigh(h)void set_heigh(float h);float get_heigh();float area();float volume();friend ostream & operator (ostream & output,cylinder & pt);private:float heigh;void cylinder:set_heigh(float h)heigh=h;float cylinder:get_heigh()return heigh;float cylinder:area()return 2*circle:area() + 2*3.14*circle:get_radius() ;float cylinder:volume()return circle:area()*heigh ;ostream & operator (ostream & output,cylinder & pt)outputpt.get_x(),pt.get_y()r=pt.get_radius()endl;outputarea=pt.area() volume=pt.volume()endl;return output;int main()cylinder c(1.1,2.2,3.3,4.4);coutx=c.get_x() y=c.get_y() r=c.get_radius() heigh=c.get_heigh()endl;c.set_point (5.5,6.6);c.set_radius(7.7);c.set_heigh(8.8);coutx=c.get_x() y=c.get_y() r=c.get_radius() heigh=c.get_heigh()endl;cout c;point & pref=c;coutnpref as a point:prefendl;circle & cref=c;coutncref as a circle:cref键盘缓冲区输入缓冲区内存输出缓冲区显示器 1,iostream类库(I/O类库)中有关的类 在该类中包含许多用于输入输出的类 2,与iostream类库(I/O类库)有关的头文件 I/O类库中的类是在不同的头文件中定义的 头文件中不仅定义了不同的类,还定义了对象和运算符重载函数。如Iostream头文件中定义了四种对象:cin cout cerr clog 3,在iostream头文件中定义的流对象 Iostream头文件中包含的类有:ios ,istream ,ostream,等 Iostream头文件中就定义了四种对象:cin cout cerr clog 4,在iostream头文件中重载运算符 第二节 标准输出流一:cout,cerr,clog流 1,cout流 Cout是ostream流对象,不是c+的关键字 Cout输出数据时可以不考虑数据的类型,系统自己判断 Cout流有输出缓冲区 Cout流只对标准数据进行了重载 2,cerr流 Cerr流的对象只能流到显示器 3,clog流 Clog有缓冲区,cerr没有缓冲区二:格式输出(两种方式:控制符和流对象的成员函数) 1,控制符控制格式输出 2,流对象的成员函数控制格式输出三:用流成员函数put输出字符例如 cout.put(a) 第三节 标准输出流一:cin流(遇到空格 回车 tab键就停止提取) 提取失败时 cin 的值为0;提取成功时 cin 的值为非0;二:用于字符输入的流成员函数 1,用get函数读入一个字符 无参数的get函数 c=cin.get

温馨提示

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

评论

0/150

提交评论