复习资料 c++ 面向对象程序设计Word格式文档下载.docx

上传人:b****2 文档编号:15056037 上传时间:2022-10-27 格式:DOCX 页数:99 大小:129.63KB
下载 相关 举报
复习资料 c++ 面向对象程序设计Word格式文档下载.docx_第1页
第1页 / 共99页
复习资料 c++ 面向对象程序设计Word格式文档下载.docx_第2页
第2页 / 共99页
复习资料 c++ 面向对象程序设计Word格式文档下载.docx_第3页
第3页 / 共99页
复习资料 c++ 面向对象程序设计Word格式文档下载.docx_第4页
第4页 / 共99页
复习资料 c++ 面向对象程序设计Word格式文档下载.docx_第5页
第5页 / 共99页
点击查看更多>>
下载资源
资源描述

复习资料 c++ 面向对象程序设计Word格式文档下载.docx

《复习资料 c++ 面向对象程序设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《复习资料 c++ 面向对象程序设计Word格式文档下载.docx(99页珍藏版)》请在冰豆网上搜索。

复习资料 c++ 面向对象程序设计Word格式文档下载.docx

P=newtype[s];

Delete[]p;

多维数组(二维数组):

必须指出所有维的长度

指针变量=new类型名[下标表达式][下标表达式];

Delete[]变量名

定义一个3×

4的数组

Int(*p)[4];

p是个指针,它指向一个n维数组(4定义的时候必须已知,即后几维必须已知)

p=newint[3][4];

//第一维可以是常量或表达式,其他维必须全部为常量

对象:

可以在创建对象的时候同时进行初始化

类名*指针变量=new类名(实参表);

对象数组:

语法:

类名数组名[元素个数];

或:

类名*指针名;

指针名=new类名[数组长度];

PointA[2];

Point*p;

*p=newPoint[5];

delete[]p;

初始化:

每个对象都要调用一次构造函数和一次析构函数。

1)对象数组确定且长度有限:

可以使用参数列表初始化PointA[2]={Point(1,2),Point(3,4)};

2)对象数组长度比较大或不确定:

只能调用无参或者使用缺省参数的函数PointA[2];

原因:

在建立对象数组的时候,C++不允许整体对对象进行初始化(即[]和()不能一起使用),这时不能给对象使用有参数的构造函数

所以:

若创建一个类的对象数组,就对给类的构造函数有要求:

对象数组只能调用一个不需要参数的构造函数

常见问题:

1):

有了malloc/free为什么还要new/delete?

malloc/free只能满足内部数据类型的变量,它们只需要申请空间,无法对空间进行操作

而对于非内部数据类型的对象来说,对象在创建的同时要自动执行构造函数,在消亡之前要自动执行析构函数。

由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够自动地调用构造函数和析构函数。

即用无法满足动态对象的要求。

因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。

注意new/delete不是库函数,而是运算符。

malloc/free是标准库函数。

2):

malloc/free和new/delete的相同点和不同点

相同点:

它们都可以申请和释放空间。

不同点:

一、new:

分配内存+调用类的构造函数+初始化delete:

释放内存+调用类的析构函数

malloc:

只分配内存,不会进行初始化类成员的工作free只释放内存,不会调用析构函数

二、newdelete是运算符,可以进行重载

malloc,free是函数,不可以进行重载

三、newdelete更加安全,简单:

不用计算类型大小:

自动计算要分配存储区的字节数

不用强制类型转换:

自动返回正确的指针类型

四、new可以分配一个对象或对象数组的存储空间,malloc不可以

五、可以超载与类相关的new和delete

六、malloc/free是标准库函数,new/delete是C++运算符

new和delete搭配使用,malloc和free搭配使用:

混搭可能出现不可预料的错误

3):

new后执行的三个操作:

(某面试题目)

1、new的类分配内存空间。

2、调用类的构造方法。

3、返回该实例(对象)的内存地址

友元函数

1、为什么要引入友元函数:

在实现类之间数据共享时,减少系统开销,提高效率具体来说:

为了使其他类的成员函数直接访问该类的私有变量

即:

允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数

优点:

能够提高效率,表达简单、清晰

缺点:

友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。

2、什么时候使用友元函数:

1)运算符重载的某些场合需要使用友元。

2)两个类要共享数据的时候

3、怎么使用友元函数:

友元函数的参数:

因为友元函数没有this指针,则参数要有三种情况:

1、要访问非static成员时,需要对象做参数;

--常用(友元函数常含有参数)

2、要访问static成员或全局变量时,则不需要对象做参数

3、如果做参数的对象是全局对象,则不需要对象做参数

友元函数的位置:

因为友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。

友元函数的调用:

可以直接调用友元函数,不需要通过对象或指针

友元函数的分类:

根据这个函数的来源不同,可以分为三种方法:

1、普通函数友元函数:

a)目的:

使普通函数能够访问类的友元

b)语法:

声明位置:

公有私有均可,常写为公有

声明:

friend+普通函数声明

实现位置:

可以在类外或类中

实现代码:

与普通函数相同(不加不用friend和类:

:

调用:

类似普通函数,直接调用

c)代码:

[cpp]viewplaincopyprint?

classINTEGER

{

private:

intnum;

public:

friendvoidPrint(constINTEGER&

obj);

//声明友元函数

};

voidPrint(constINTEGER&

obj)//不使用friend和类:

//函数体

}

voidmain()

INTEGERobj;

Print(obj);

//直接调用

2、类Y的所有成员函数都为类X友元函数—友元类

a)目的:

使用单个声明使Y类的所有函数成为类X的友元

它提供一种类之间合作的一种方式,使类Y的对象可以具有类X和类Y的功能

具体来说:

前提:

A是B的友元(=》A中成员函数可以访问B中有所有成员,包括私有成员和公有成员--老忘)

则:

在A中,借助类B,可以直接使用~B.私有变量~的形式访问私有变量

b)语法:

公有私有均可,常写为私有(把类看成一个变量)

friend+类名---不是对象啊

c)代码:

classgirl;

classboy

char*name;

intage;

boy();

voiddisp(girl&

);

voidboy:

disp(girl&

x)//函数disp()为类boy的成员函数,也是类girl的友元函数

cout<

<

"

boy'

snameis:

name<

age:

age<

endl;

//正常情况,boy的成员函数disp中直接访问boy的私有变量

girl'

x.name<

x.age<

//借助友元,在boy的成员函数disp中,借助girl的对象,直接访问girl的私有变量

//正常情况下,只允许在girl的成员函数中访问girl的私有变量

classgirl

private:

friendboy;

//声明类boy是类girl的友元

girl();

boyb;

girlg;

b.disp(g);

//b调用自己的成员函数,但是以g为参数,友元机制体现在函数disp中

3、类Y的一个成员函数为类X的友元函数

使类Y的一个成员函数成为类X的友元

具体而言:

而在类Y的这个成员函数中,借助参数X,可以直接以X。

私有变量的形式访问私有变量

声明在公有中(本身为函数)

friend+成员函数的声明

先定义Y的对象y---使用y调用自己的成员函数---自己的成员函数中使用了友元机制

girl(char*N,intA);

friendvoidboy:

//声明类boy的成员函数disp()为类girl的友元函数

x)

//访问自己(boy)的对象成员,直接访问自己的私有变量

boyb();

girlg();

}

4、在模板类中使用友元operator<

(对<

运算符的重载)

a)使用方法:

在模板类中声明:

friendostream&

operator<

<

>

(ostream&

cout,constMGraph<

VexType,ArcType>

&

G);

在模板类中定义:

template<

classVexType,classArcType>

ostream&

G)

//函数定义

b)注意:

把函数声明非模板函数:

(ostream&

cout,constMGraph&

把函数声明为模板函数:

(ostre

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

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1