谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc

上传人:聆听****声音 文档编号:1979011 上传时间:2023-05-02 格式:DOC 页数:23 大小:91KB
下载 相关 举报
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第1页
第1页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第2页
第2页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第3页
第3页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第4页
第4页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第5页
第5页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第6页
第6页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第7页
第7页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第8页
第8页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第9页
第9页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第10页
第10页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第11页
第11页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第12页
第12页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第13页
第13页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第14页
第14页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第15页
第15页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第16页
第16页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第17页
第17页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第18页
第18页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第19页
第19页 / 共23页
谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc

《谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc》由会员分享,可在线阅读,更多相关《谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc(23页珍藏版)》请在冰点文库上搜索。

谭浩强c++面向对象程序设计 (红色书皮)大纲笔记.doc

第一章C++初步知识

第一节从C到c++

一:

c++的输入输出语句

C++用cin和cout完成输入输出功能,c用scanf和printf

二:

c++用const定义常变量

C语言#definePI3.14

c++constfloatpi=3.14

三:

c++函数原型声明

四:

c++函数的重载

函数名相同,参数个数或类型,或函数返回值之中有不同的,用一个函数名实现不同的功能

五:

函数模板

定义完函数模板,系统根据实际参数的类型赋给相应的形参

形式template(用T代替数据类型)

六:

c++有默认参数的函数

七:

变量的引用(别名)

Inta

Int&b=a;b是a的引用(别名),共同占用同一个内从

八:

内置函数

不重要

九:

运算符作用域

以后见了再说

十:

字符串变量

C语言用字符数组表示字符串,c++本身就有string数据类型

十一:

动态分配内存

C语言用malloc函数和free函数

C++用new函数和delete函数

第二章类和对象

第一节类的声明和对象的定义

一:

类和对象的关系

二:

类的声明

Class类名

{

Public:

Private:

};

三:

对象的定义

1,先声明类再定义对象

2,声明类的同时定义对象

3,不出现类名直接定义对象

第二节类的成员函数

一:

成员函数的作用

调用数据成员

二:

在类外定义成员函数

1,成员函数:

类型名类名:

成员函数名(参数表列)

2,构造函数类名:

成员函数名(参数表列)

没有类型名是因为构造函数没有参数没有返回值

三:

inline成员函数

四:

成员函数的存储方式

不和数据成员在一起,独立存储,不同对象使用相同的成员函数,通过this指针区别不同的对象

第三节对象成员的引用

一:

通过对象名加成员运算符

二:

通过引用名加成员运算符

三:

通过指针访问

第四节类的特点

一:

抽象性

类和对象的关系:

类是对象的抽象,对象是类的具体

二:

封装性

公用接口和私有实现的分离(privatepublic)

三:

继承性(第三章)

四:

多态性(第四章)

第三章关于类和对象的进一步讨论

第一节对象的初始化(用构造函数)

一:

构造函数的定义

给对象初始化的函数叫做构造函数

二:

用构造函数初始化的方法

1.默认构造函数

2.初始化构造函数(可以用参数初始化表进行初始化)

3.带默认参数的初始化构造函数

三:

调用构造函数的时间

定义对象时自动调用构造函数

第二节析构函数

一:

析构函数的作用

撤销对象之前的清理工作,或者清理前的最后操作

二:

调用析构函数的时间

对象撤销前自动调用析构函数

第三节调用构造函数和析构函数的顺序

一:

先构造后析构,后构造先析构

二:

要考虑对象撤销的顺序

第四节对象数组

一:

对象数组的定义

类名对象数组名[个数]

二:

对象数组的初始化

例如studentstu【3】={

Student(1001,1889),

Student(1002,1979),

Student(1003,1881)};

第五节对象指针

一:

指向对象的指针

定义对象时会为对象分配一定的内存空间,内存空间的起始地址就是该对象的指针

类名*指针变量名

二:

指向成员的指针

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,隐式转换inta=3

a=a+4.4

2,显式转换

C标准(类型名)数据

C++标准类型名(数据)

二:

用转换构造函数进行类型转换

1,作用将一个其他类型的数据转换成一个指定类的对象

2,特点只有一个参数

可以转换标准类型也可以转换其他类成员

3,举例complex(doubler){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

classpoint

{

public:

point(floata=0,floatb=0):

x(a),y(b){}

voidset_point(floata,floatb);

floatget_x();

floatget_y();

friendostream&operator<<(ostream&output,point&pt);

private:

floatx;

floaty;

};

voidpoint:

:

set_point(floata,floatb)

{x=a; y=b;}

floatpoint:

:

get_x()

{returnx;}

floatpoint:

:

get_y()

{returny;}

ostream&operator<<(ostream&output,point&pt)

{

output<<"["<

returnoutput;

}

classcircle:

publicpoint

{

public:

circle(floata=0,floatb=0,floatr=0):

point(a,b),radius(r){}

voidset_radius(floatr);

floatget_radius();

floatarea();

friendostream&operator<<(ostream&output,circle&pt);

private:

floatradius;

};

voidcircle:

:

set_radius(floatr)

{radius=r;}

floatcircle:

:

get_radius()

{returnradius;}

floatcircle:

:

area()

{return2*3.14*radius;}

ostream&operator<<(ostream&output,circle&pt)

{

output<<"["<

output<<"area="<

returnoutput;

}

classcylinder:

publiccircle

{

public:

cylinder(floata=0,floatb=0,floatr=0,floath=0):

circle(a,b,r),heigh(h){}

voidset_heigh(floath);

floatget_heigh();

floatarea();

floatvolume();

friendostream&operator<<(ostream&output,cylinder&pt);

private:

floatheigh;

};

voidcylinder:

:

set_heigh(floath)

{heigh=h;}

floatcylinder:

:

get_heigh()

{returnheigh;}

floatcylinder:

:

area()

{return2*circle:

:

area()+2*3.14*circle:

:

get_radius();}

floatcylinder:

:

volume()

{returncircle:

:

area()*heigh;}

ostream&operator<<(ostream&output,cylinder&pt)

{

output<<"["<

output<<"area="<

returnoutput;

}

intmain()

{

cylinderc(1.1,2.2,3.3,4.4);

cout<<"x="<

c.set_point(5.5,6.6);

c.set_radius(7.7);

c.set_heigh(8.8);

cout<<"x="<

cout<

point&pref=c;

cout<<"\nprefasapoint:

"<

circle&cref=c;

cout<<"\ncrefasacircle:

"<

return0;

}

第三节虚函数

一:

虚函数的作用

虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。

二:

虚函数的使用方法

1,在基类用virtual声明成员函数为虚函数

2,在派生类中重新定义该函数体。

此函数与基类虚函数参数个数类型,返回值类型都相同。

3,定义一个指向基类对象的指针,并使它指向同一类组中的某一对象。

4,通过该指针变量调用此虚函数。

三:

静态关联和动态关联

1,静态关联:

在编译阶段确定调用哪个函数,称为静态关联

2,动态关联:

在运行阶段确定调用哪个函数,称为动态关联

四:

虚函数的特点

1,只能声明类的成员函数为虚函数。

2,一个成员函数为虚函数后,其派生类的所有同名函数均为虚函数。

五:

什么情况下应当声明虚函数

1,做基类的成员函数可以声明虚函数

2,如果基类成员函数的作用在派生类中的作用不需要修改,则不需要声明为虚函数。

3,考虑成员函数的调用使用函数名还是用指针。

4,有时,定义虚函数时,不指定函数体(函数体为空)。

——纯虚函数

六:

虚析构函数

一般将析构函数定义为虚函数。

第四节纯虚函数和抽象类

一:

纯虚函数

1,定义

纯虚函数是在声明虚函数时被初始化为0的函数

2,形式

Virtual函数类型函数名(参数表列)=0

3,特点

纯虚函数没有函数体

=0不代表返回值为0,只是形式而已

这是一个声明语句,最有要有分号

4,作用

在基类中为派生类保留一个函数的名字,以便派生类根据需要对它进行定义

二:

抽象类

1,定义

不用来定义对象,只作为基类来派生的类称为抽象基类(抽象类)

2,目的

作为基类去建立派生类,为派生类预留函数名,功能让派生类自己定义

3,特点

包含纯虚函数的类都是抽象类

抽象类的派生类为纯虚函数重新定义后,派生类就不在是抽象类

抽象类不能定义对象,但是可以用指向抽象基类的指针指向它

第七章输入输出流

第一节C++的输入和输出

一:

输入输出的含义

1输入:

从输入文件将数据传送给程序

2输出:

将数据从程序传送给输出文件

二:

输入输出的分类

1标准的输入输出

2文件的输入输出

3字符串输入输出

三:

c++输入输出的特点

1,安全性

2,可扩展性

四:

c++的输入输出流

键盘—>键盘缓冲区—>输入缓冲区—>内存—>输出缓冲区—>显示器

1,iostream类库(I/O类库)中有关的类

在该类中包含许多用于输入输出的类

2,与iostream类库(I/O类库)有关的头文件

I/O类库中的类是在不同的头文件中定义的

头文件中不仅定义了不同的类,还定义了对象和运算符重载函数。

如Iostream头文件中定义了四种对象:

cincoutcerrclog

3,在iostream头文件中定义的流对象

Iostream头文件中包含的类有:

ios,istream,ostream,等

Iostream头文件中就定义了四种对象:

cincoutcerrclog

4,在iostream头文件中重载运算符

第二节标准输出流

一:

cout,cerr,clog流

1,cout流

Cout是ostream流对象,不是c++的关键字

Cout输出数据时可以不考虑数据的类型,系统自己判断

Cout流有输出缓冲区

Cout流只对标准数据进行了<<重载

2,cer

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2