All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET,2.0
二十一 Forms 可用性_[Html教程]
SQL,server2000简介_mssql学习_编程技术
ASP.NET,应用中大文件上传研究_.net资料_编程技术
Sql表数据操作_mssql学习_编程技术
事半功倍之javascript,(1)_JavaScript技术_编程技术
ASP.NET2.0缓存(Cache)技术_[Asp.Net教程]
C#中正则表达式进行忽略大小写的字符串替换_.net资料_编程技术
ASP.NET技巧:HTTP性能调优之设置连接失效时间_.net资料_编程技术
ASP.NET技巧:教你制做Web实时进度条_[Asp.Net教程]
Reading number is top 10 pictures
Summer is most suitable for young people to travel in China3
2013中国四川省高考作文
Average female college students2
含苞欲放的素颜美少女2
BingBingFan apple dew point photo gallery4
Terrorist smile the largest human history an explosion1
Small s breast enhancement demonstration
Plump, too plump!2
非常漂亮的泳装美女
奇趣的世界记录3
Download software ranking
Boxer's Top ten classic battle8
Ashlynn Video5
jdk1.5
传奇私服架设教程
致我们终将逝去的青春
都市狐狸姑娘传
美女游泳记
C#编程思想
Rio big adventure
DreamWeaver8
qq published in(发表于) 2014/7/9 22:36:13 Edit(编辑)
C++封装与访问控制[二.二]

C++封装与访问控制[二.二]

C/C++封装与访问控制[二.二]

C/C++封装与访问控制[二.二]

1.封装与访问控制的含义

封装是指对对象的属性与方法实施一定访问控制的技术,这里的访问通常指调用、查看、修改等操作。实施封装的好处是可以控制对象属性值和行为被无序访问,使得访问规范地通过事先周密规划和实现的权限控制和接口实现。C++实现OOP 的封装是通过对成员变量和成员函数的访问控制以及父类派生子类时的派生方式控制实现的,表2-1 给出了C++通过访问和派生控制实现的封装规则。

表 2-1 C++通过访问和派生控制实现的封装规则



关于表2-1 的说明:

(1) 第3 列的“类定义”是指在类定义与实现中对自身成员变量和成员函数的访问。

(2) 第4 列的“子类定义”是指在子类定义与实现中对父类成员变量和成员函数的访问。

(3) 第5 列的“类实例”是指在类实例中对自身成员变量和成员函数的访问。

(4) 第6 列的“子类实例”是指在子类实例中对父类成员变量和成员函数的访问。

(5) 为了便于理解和说明,给表中的控制规律单元格进行了编号,如2.2 表示在通过public方式派生的子类实例中,对父类的采用protected 控制的成员的访问控制规则:√表示允许访问,×表示不允许访问。

C++实现OOP 的封装通常遵守如下规律:

(1) 类的成员变量一般采用protected 或private 访问控制,必要时提供访问接口,参见【源程序2-2】的第7~8 行、第13~14 行。

(2) 类的成员函数一般采用public 访问控制,以便于继承和访问,但也有专供内部使用的通过private 或protected 控制的成员函数,参见【源程序2-2】的第29~43 行。

(3) 父类派生子类一般采用public 派生方式,使得子类可以继承和访问父类的多数成员,参见【源程序2-2】的第21 行、第46 行。

2.封装与访问控制的C++实现样板分析

【源程序 2-2】中通过派生控制和访问控制实现封装的实例分析:

(1) 表2-1 中的第3 列“类定义”全部为允许,其含义就是在类定义与实现编码中,可以自由地访问自己所定义和实现的任意成员变量和成员函数,不受访问控制符和派生方式的任何约束。例如,第83~84 行代码位置是属于Point 类成员函数的实现段,因此可以自由地对自身声明的成员变量PType 和NumOfInstances 进行操作(此处是查看和赋值)。

(2) 表2-1 中的第5 列“类实例”的访问控制是指在类实例中对自身定义和实现的成员变量和成员函数的访问控制规律。3.1×和3.2×表示类实例中不允许对自身定义和实现的private和protected 类型的成员进行直接访问,3.3√表示类实例中允许对自身定义和实现的public 类型的成员进行直接访问。例如,类Point 的定义中在第23~28 行分别声明了受public 控制的成员变量PType、受protected 控制的成员变量NumOfInstances 和受priavte 控制的成员变量Visible,因此对于第188 行生成的Point 类的P1,P2 等实例,参照表2-1 可分析下面的操作合法性:



Point P1(2, 9, Online), P2(2, 9), … //自动调用匹配的构造函数生成类实例

cout<
cout<
cout<
cout<
cout<
cout<
P1.AssignAPoint(P2); //根据表2-1 的 3.1,不允许


(3) 表2-1 中的第4 列“子类定义”的访问控制是指在子类定义和实现中对父类的成员变量和成员函数的访问控制规律。从第21 行的Point 类的声明中可以看出,Point 类是由Location类通过public 方式派生的子类,因此第21~45 行、第79~135 行的代码段都属于由父类Location 派生的子类Point 的定义与实现代码,这两个代码段对父类Location 的成员变量和成员函数的访问会受到相应的控制,2.1×表示不允许访问父类的private 控制的成员变量和成员函数,2.2√和2.3√表示允许访问受protected 和public 控制的成员变量和成员函数,例如第109 行、第118 行等。

(4) 表2-1 中第6 列“子类实例”的访问控制是指在子类实例对父类的成员变量和成员函数的访问控制规律。参照表2-1 可分析下面伪代码操作的合法性:



Point P1(2, 9, Online), P2(2, 9), … //自动调用匹配的构造函数生成P1,P2 类实例



Circle C1(99, 3, 8),…

cout<
cout<
cout<
cout<
cout<
cout<
cout<
cout<
cout<
cout<
C1.AssignAPoint(P2); //根据表2-1 的 4.1,不允许





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.