分享
 
 
 

C++ FAQ阅读笔记[1]

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

[7.1]什么是类(class)?

它是面向对象软件的基本构成模块.

一个类就定义了一种数据类型,就像在C中的struct的作用相似。在计算机科学角度上讲,一个类型由一系列的状态和一系列的改变这些状态的操作组合。这样的话,int可以说是一个类型,因为它有一系列的状态而且它有一些对于这些状态的操作,如j+j或i++,等。与此完全相同的是,一个类提供了一系列的这样的(通常都是public型的)操作,和一系列的表示这个类型可以是的抽象的值的数据位(通常不是public的)。

你可以把int想象为一个有成员函数"++"的类,等(int其实并不是一个实,这样说是说明了以下的这样一个比喻:一个类是一种类型,就跟int就是一个类型一样。)

注意:C程序员可以把类想成一个默认成员都是私有型(private)的C的struct。但是如果那是你关于一个类想的所有的东西的话,你可能需要自己做一些实例来增加一些面向对象的经验

[7.2]什么是对象?

一个有相关语义的存储区域称为一个对象。

当你定义了一个变量int i,我们说"i是类型int的一个对象"。在面向对象中,"对象"通常是指"类的一个实例"。这样一个类就定义了很多个该类的实例对象的可能的行为。

[7.3]什么时候使用接口是"好"的?

当它提供了对于一大堆类的简化视图(chunk of software),并且它能使用一个用户的词汇表达出来时,使用接口是"好"的。

"一大堆"的通常是一个或一群紧密关联的类,"用户"是指其他开发者,而不是指最终用户.

简化的视图意思是不必要的细节内容被故意地隐藏起来了。这就减少了用户出错的机率。

用户的词汇是指用户不需要去学新的词或概念就可以理解的意思。这样就降低了用户了解它的弯路。

[7.4]什么叫封装?

为了防止对一些信息和功能的未经认证的访问。

封装关键的思想是把软件中不稳定的块从稳定的块中分离出来。封装把软件块周围围上一个防火墙,这样会阻止软件其他的块访问不到不稳定的块,它们只能访问稳定的部分。这样就防止了它们在不稳定的部分被改动之后不可以正常工作。在面向对象中,"块"(chunk)通常是指一个或一群紧密关联的类。

不稳定的部分指实现的细节。如果块是单个类,不稳定的部分通常用private和protected进行封装。如果它是一群紧密关联的类的块,封装就可以用来防止对这一群类的完全的访问。继承也可以被看为是一种形式的封装。

稳定的部分是指接口部分。一个好的接口可以用用户的词汇来提供简化的视图,而且它是同由外向内设计的(这里"用户"是指另一个开发者,而不是最终的购买用户")。

如果它是单个类的块,这个接口就是这个类的public部分:成员函数和友员函数.

如果它是一群类的块,接口会在块中包括多个类。

设计一个清晰的接口并把接口从实现中分离出来仅是让用户可以使用这些接口,但是封装接口实现的过程是强迫用户去使用这些接口。

[7.5]C++如何平衡安全性和可用性(易用性)?

在C中,封装是通过在一组单元或模块中让成员成为静态来实现的。它防止了其他的模块访问静态内容。(顺便提一下,这样的做法已经是被不赞成的了(deprecated),不要在C++中这样做。)

不幸的是,你可以通过一个类来达到多重实例和封装。public:是一个类中包含类的接口的部分,它通常都由类的public部分构成:成员函数和它的友员函数。private:是类中包含类的实现的部分,也就是数据存在的地方。

最终的结果就是像是一个"封装了的结构体".这就降低了安全性(信息隐藏)和可用性(多重实例).

[7.6]我如何在其他的程序员可以看到我的类的私有部分的情况下造成不稳定的封装呢?

不用那么费劲 ---封装是对代码而言的,而不是对人而言的。

其他的程序员们看到你的private或protected成员不会造成你的封装不稳定,只要他们不根据他们看到的内容写其他的代码。换句话说,封装不能防止人们知道一个类中的内容,它只能防止写的代码与类的内部相独立。你不需要花"维护费用"来维护你两耳之间的灰白色的东西,但是你不得不花"维护费用"来维护从你手间编写出来的代码。你所能知道的就是不要增加维护的费用,写一些依赖于接口的代码而不是依赖于它的实现过程的。

另外,这常不是问题。我不知道哪个程序员会故意写代码来访问一个类的私有成员,"我的建议是在这样的情况下换个程序员,而不是换代码"[James Kanze]

[7.7] 封装是一种安全措施吗?

不。

封装 != 安全

封装只是防止错误,而不是用来查安全问题的间谍。

[7.8] struct关键字和class关键字有什么区别吗?

struct的成员和基本类在默认的情况下是public型的,但是在类中的时候,它们默认是private的。

注意:你应该让你的基成员有明确的public,private,protected性,而不是依赖于默认情况。

另外,struct和class在功能上是相同的。

好的,让我们结束这种纯的技术性讨论。感情上讲,大部分程序员会把一个类跟一个结构体的界限划得很清楚。一个结构体让人感觉是一系列有极少封装性和函数的开放的数据位。一个类让人感觉就是一个活生生的成员的集合和与它们相关的智能的服务,它是一个强封装性的屏障和一个定义的很完善的接口。因为这是大部分人已经有的感觉,你应该在当一个只有极少方法且只有公有成员的类的情况下用结构体来代替类(这样的东西在设计很好的系统中是实际存在的!)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有