2015年计算机二级C++类和对象考点总结(4)
发布时间:2012/6/14 10:37:44 来源:城市网学院 编辑:ziteng
-
6.8 友元
类具有数据封装和隐藏的特性,只有类的成员函数才能访问类的私有成员,外部函数只能访问类的公有成员。但在某些情况下,需要在类的外部访问类的私有成员。这时,如果通过公有成员函数进行访问,由于参数传递、类型检查和安全性检查等需要时间上的开销,将影响程序的运行效率。为了解决整个问题,引入了友元。友元可以在类外部直接访问类的私有成员,提高了程序的运行效率。
友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。对于一个类,可以利用friend关键字将一般函数、其他类的成员函数或者是其他类声明为该类的友元,使得这个类中本来隐藏的信息(包括私有成员和保护成员)可以被友元所访问。如果友元是一般成员函数或是类的成员函数,称为友元函数;如果友元是一个类,则称为友元类,友元类的所有成员函数都成为友元函数。
1友元函数
友元函数不是当前类的成员函数,而是独立于当前类的外部函数(包括普通函数和其他类的成员函数),但它可以访问该类的所有对象的成员,包括私有成员、保护成员和公有成员。
友元函数要在类定义时声明,声明时要在其函数名前加上关键字friend。该声明可以放在公有部分,也可以放在私有部分。友元函数的定主既可以在类内部进行,也可以在类外部进行。
2友元类
友元除了可以是函数外,还可以是类,即一个类可以作为另一个类的友元,称为友元类。友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。
友元类可以在另一个类的公有部分或私有部分进行说明,说明方法如下:
friend<类名>;//友元类类名
6.9 对象数组
对象数组是指数组元素为对象的数组,该数组中的每一个元素都是同一个类的对象。
对象数组的定义格式如下:
<类名><数组名>[<大小>]……
使用对象数组成员的一般格式是:
<数组名>[<下标>].<成员名>
6.10 成员对象
类的数据成员可以是简单类型或自定义类型,也可以是类类型的对象。因此,可以利用已定义的类来构成新的类,使得一些复杂的类可以由一些简单类组合而成。类的聚集,描述的就是一个类内嵌其他类的对象作为成员的情况。
当一个类的成员是另外一个类的对象时,该对象就称为成员对象。当类中出现了成员对象时,该类的构造函数要包含对成员对象的初始化,通常采用成员初始化列表的方法来初始化成员对象。定义的一般格式如下:
<类名>::<类名>(<总形参表>):<成员对象1>(<形参表1>),<成员对象2>(<形参表2<),…
{
//类成员的初始化
}
建立一个类的对象时,要调用它的构造函数。如果这个类有成员对象,要首先执行所有的成员对象的构造函数,当全部成员对象的初始化都完成之后,再执行当前类的构造函数体。析构函数的执行顺序与构造函数的执行顺序相反。
当类中有多个成员对象时,要按照定义成员对象的顺序建立各个子对象,即成员对象构造函数的执行顺序仅与成员对象在类中声明的顺序有关,而与成员初始化列表中给出的成员对象的顺序无关。
如果在构造函数的成员初始化列表中没有给出对成员对象的初始化,则表示使用成员对象的缺省构造函数。如果成员对象所在的类没有缺省构造函数,将产生错误。如果所有的成员对象都是调用缺省构造函数建立的,那么该类的构造函数的成员初始化列表可以省略。