博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++学习笔记(三)
阅读量:4096 次
发布时间:2019-05-25

本文共 1477 字,大约阅读时间需要 4 分钟。

友元函数和友元类

类具有封装性,类中私有成员一般只能通过该类中的成员函数才可以访问,而程序中该类外的其他函数是无法访问其私有成员的。程序中要访问类的私有成员必须通过对象调用该类的公有成员函数来实现,但这样会比较多地占用系统的时间和空间。为了提高运行效率,引进了有缘函数这个概念,它可以作为普通的函数来直接访问类的所有成员,包括私有成员。同样,友元类概念的引入使得一个类作为另一个类的友元,那么这个类的所有成员函数都是另一个类的友元函数。但使用友元函数会使数据的封装性削弱,好比在一个盒子上开了一个口,导致程序的可维护性变差,因此使用时一定要慎重。

友元函数

在一个类内说明的友元函数不是该类的成员函数,而是独立于该类的普通函数,即友元函数是一个说明在类体内的普通函数,其说明格式如下:

friend 
<类型说明符>
<函数名>
(
<参数表>
);

其中,friend是关键字,在其后的是函数的原型。友元函数可在类体内的任何位置说明,通常放在类体内的开始位置,其函数定义一般放在类体外。

友元函数访问类的变量成员时,必须与在友元函数中定义的或传递给有缘的对象联系在一起,在某一时刻它要访问哪个对象的私有成员,需要显示的确定对象。
友元函数可以同时作为多个类的有缘,在进行两个类的定量比较时,经常使用到友元函数。

友元类

友元不仅可以是函数,还可以是一个类,即一个类可以作为另一个类的有缘,这意味着作为友元的类的所欲成员函数都是该类的友元函数,都可以访问该类中的私有成员。其说明方法如下:

friend class 
<类名>
;

注意:有缘的关系是不可逆的。也就是说,类B是类A的友元类,并不表示类A也是类B的友元,所以此时类A的其他成员函数不能访问类B的私有成员。

静态成员

在C++程序中,为了共享某个数据,可以将该数据说明为全局变量,但这样会削弱数据的封装性。为了实现既能共享某个数据,有不会削弱数据的封装性,可以通过把要共享的数据在类中用关键字“static”来修饰,说明为类的静态成员。这样,不管该类有多少个对象,其静态成员只有一个副本,这个副本为所有该类的对象共享。
静态成员有两种:一种是静态数据成员,另一种是静态函数成员。

静态数据成员

静态数据成员为全局变量,是该类所有对象共有的数据成员,可用于在同类对象之间进行信息交换。静态数据必须在程序开始之前初始化并为该类所有对象共享,以后再建立新的对象时,就不需要在对其进行初始化。

静态成员函数

当一个函数被说明为 static 时,作为静态的成员函数,它属于整个类,成为该类所有对象所共享的成员函数,而不只属于类中的某个对象。在使用静态成员函数时,要指出其作用在那个对象上,或用限定符“::”加载类名之后,作为他的限定词。因为它不属于特定的队形,所以不能像一般的成员函数那样随意的访问对象中的非静态数据成员。
一般来说,静态成员函数访问的基本上都是静态数据成员或全局变量。因此,对于仅涉及静态数据成员的成员函数,可以说明伪静态函数。

类中静态成员的定义和调用

#include
class student{
char studentname[20]; int score; static int total;public: student() { total++; } static void show_total() { cout<<"student's total number is"<
<

转载地址:http://zvxii.baihongyu.com/

你可能感兴趣的文章
对象交互
查看>>
JVM之GC算法
查看>>
Android之路-------传说中的大喇叭(广播接收器)
查看>>
mysql命令添加表字段
查看>>
js常见的判断移动端或者pc端或者安卓和苹果浏览器的方法总结
查看>>
锐捷 Linux登录命令
查看>>
python闭包和装饰器
查看>>
使用PHP Manager for IIS时,Windws 10自带IIS注意事项
查看>>
UDP协议的几个特性
查看>>
js通过 URL下载文件
查看>>
HDU3308 LCIS
查看>>
强大到无与伦比的Graphviz
查看>>
Matlab 之索引必须是正整数或逻辑变量
查看>>
关于Powerdesiner 生成PostgreSQL数据库的时候双引号的问题
查看>>
SQLServer2008数据库卸载图解
查看>>
环境变量/path/classpath/JAVA_HOME/JAVA环境变量配置
查看>>
Servlet API
查看>>
Node.js 向一个文件添加内容
查看>>
文件的操作
查看>>
jquery开发之代码风格
查看>>