C++回顾——隐藏实现

一、C++的访问控制
在任何关系中,设立相关各方面都遵从的边界很重要。需要控制对结构成员的访问有两个理由:1)让客户程序员远离一些他们不需要的工具(他们很容易知道什么是重要的,什么是可以忽略的);2)允许库的设计者改变内部实现,而不必担心会对客户程序员产生影响。
访问控制通常是指实现细节的隐藏。
public意味着在其后声明的所有成员可以被所有的人访问。
private意味着除了该类型的创建者和类的内部成员函数之外,任何人都不能访问。
protected意味着就这个类的用户而言,它是private的,但它可被从这个类继承的任何类使用。
友元(friend):允许一个不属于当前结构的成员函数访问当前结构中的数据。一个friend必须在一个结构内声明。可以把一个全局函数声明为friend,也可以把另外一个结构中的成员函数甚至整个结构都声明为friend。嵌套的结构并不能自动获得访问private成员的权限,要获得访问私有成员的权限,必须遵守特定的规则:首先声明一个嵌套的结构,然后声明它是全局范围使用的一个friend,最后定义这个结构(结构的定义必须与friend声明分开,否则编译器将不把它看做成员)。

二、对象布局
在一个特定的“访问块”(被访问说明符限定的一组声明)内,这些变量在内存中肯定是连续存放的(然而这些访问块本身可以不按声明的顺序在对象中出现)。虽然编译器通常都是按访问块出现的顺序给它们分配内存,但并不是一定要这样,因为特定机器的体系结构和操作环节可对private成员和protected成员提供明确的支持,将其放在特定的内存位置上。
程序开始运行之前,所有的访问说明信息都消失了(访问说明信息通常是在编译期间消失的)。

三、类(class)
class中的成员默认为private,而struct中的成员默认为public。
易碎的基类问题(fragile base-class problem):程序员无论何时修改了一个类,无论修改的是公共的接口部分还是私有成员的声明部分,他都必须再次编译包含头文件的所有文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贪心算法是一种问题求解方法,它在每一步总是做出当前情况下的最优选择,以期望获得最优解。而"最大整数"同样可以使用贪心算法来求解。 对于"最大整数"的问题,我们可以考虑如下的贪心策略:从高位开始,尽可能选择较大的数字。具体步骤如下: 1. 对于给定的整数,我们首先将其转化为一个数组,其中每个元素表示整数的一个位数。 2. 从最高位(最左侧)开始,遍历数组。 3. 对于当前位上的数字,从9开始递减,找到第一个小于等于当前数字的最大数字。 4. 如果找到了符合条件的最大数字,将其放在当前位。否则,不做任何操作。 5. 继续向下遍历,重复步骤3-4。 6. 最终,得到的数组即为满足条件的最大整数。 以一个具体的例子说明上述算法:假设给定的整数为5372。 1. 将整数转化为数组[5, 3, 7, 2]。 2. 从最高位开始遍历。 3. 对于第一位5,从9开始递减,找到第一个小于等于5的数字,为7。 4. 将7放在第一位,得到[7, 3, 7, 2]。 5. 对于第二位3,从9开始递减,找到第一个小于等于3的数字,为3(与当前数字相等)。 6. 不做任何操作,得到[7, 3, 7, 2]。 7. 对于第三位7,从9开始递减,找到第一个小于等于7的数字,为7。 8. 将7放在第三位,得到[7, 3, 7, 2]。 9. 对于第四位2,从9开始递减,找到第一个小于等于2的数字,为2。 10. 将2放在第四位,得到[7, 3, 7, 2]。 11. 遍历结束,最终得到的数组为[7, 3, 7, 2],转化为整数为7372。 通过上述贪心算法,我们得到了满足条件的最大整数7372。证明了贪心算法在"最大整数"问题中的有效性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值