1 / 14
文档名称:

C++编程思想2.pdf

格式:pdf   大小:445KB   页数:14页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C++编程思想2.pdf

上传人:Gebu 2022/6/14 文件大小:445 KB

下载得到文件列表

C++编程思想2.pdf

相关文档

文档介绍

文档介绍:: .
쿂퓘 : The document w 下载
虽然f o o ( )函数可以访问B的所有成员,但一般的全局函数如 m a i n ( )却不能,当然其他s t r u c t
中的成员函数同样也不能。只有那些在这个 s t r u c t中明确声明了的函数才能访问这些私有成员。
对存取指定符的顺序没有特别的要求,它们可以不止一次出现,它们影响在它们之后和下
一个存取指定符之前声明的所有成员。
����(protected)
最后一种存取指定符是 p r o t e c t e d。p r o t e c t e d与p r i v a t e基本相似,只有一点不同:继承的结
构可以访问p r o t e c t e d成员,但不能访问p r i v a t e成员。但我们要到第1 3章才讨论继承。现在就把
这两种指定符当成一样来看待,直到介绍了继承后再区分这两类指定符。
友元
如果程序员想允许不属于当前结构的一个成员函数存取结构中的数据,那该怎么办呢?他
可以在s t r u c t内部声明这个函数为友元。注意,一个友元必须在一个 s t r u c t内声明,这一点很重
要,因为他(和编译器)必须能读取这个结构的声明以理解这个数据类型的大小、行为等方面
的规则。有一条规则在任何关系中都很重要,那就是“谁可以访问我的私有实现部分”。
类控制着哪些代码可以存取它的成员。让程序员没有办法“破门而入”,他不能声明一个
新类然后说“嘿,我是鲍勃的朋友”,不能指望这样就可以访问鲍勃的私有成员和保护成员。
程序员可以把一个全局函数声明为友元类,也可以把另一个 s t r u c t中的成员函数甚至整个
s t r u c t都声明为友元类,请看下面的例子:第3章 隐 藏 实 现 45
下载
struct Y有一个成员函数f( ),它将修改X类型的对象。这里有一个难题,因为 C + +的编译器
要求在引用任一变量之前必须声明,所以 struct Y必须在它的成员Y :: f(X*)被声明为struct X的
一个友元之前声明 ,但Y :: f(X*)要被声明,struct X又必须先声明。
解决的办法是:注意到Y :: f(X*)引用了一个X对象的地址。这一点很关键,因为编译器知
道如何传递一个地址,这一地址大小是一定的,而不管被传递的对象类型大小。如果试图传递
整个对象,编译器就必须知道 X的全部定义以确定它的大小以及如何传递它,这就使程序员无
法声明一个类似于Y :: g(X)的函数。
通过传递X的地址,编译器允许程序员在声明 Y :: f(X*)之前做一个不完全的类型指定。这
一点是在struct X的声明时完成的,这儿仅仅是告诉编译器,有一个叫 X的s t r u c t ,所以当它被引
用时不会产生错误,只要程序员的引用不涉及名字以外的其他信息。
这样,在struct X中,Y :: f(X*)就可以成功地声明为一个友元函数,如果程序员在编译器
获得对Y的全部指定信息之前声明它,就会产生一条错误,这种安全措施保证了数据的一致性,
同时减少了错误的发生。
再来看看其他两个友元函数,第一个声明将一个全局函数 g( )作为一个友元,但g( )在这之
前并没有在全局范围内作过声明,这表明f r i e n d可以在声明函数的同时又将它作为s t r u c t的友元。
这种声明对整个s t r u c t同样有效:friend struct Z是一个不完全的类型说明,并把整个 s t r u c t都当作
一个友元