C子类访问修饰符?
我是C新手,我有很多关于OO语言的经验,如C/C++#/ Objective-C.现在我正在学习C.
我看到这个C代码: class World : public State { }; 看来,世界继续公开上课. 这个功能的概念是什么? 解决方法
对于关键字类定义的类,只需要使用public关键字,默认访问修饰符(对于所有的数据成员,成员函数和基类)都是私有的.所以
class World : State {}; 是相同的: class World : private State {}; 这可能不是你想要的 – 这意味着基础类只能在类世界中访问.外界“不知道”,遗产就在那里. 对于使用关键字struct定义的类,默认访问修饰符为public,因此可以写: struct World : State {}; 并获得两者的外观和行为有点像所有其他语言与继承.但是struct关键字和它定义一个类的事实真的只是与C的兼容性.你不会找到很多C风格的指南,推荐使用它,以获得默认的公共可访问性 – 一般只用于对于POD课程,或者只适用于没有成员函数的课程. 至于为什么C首先有私有继承:对于大多数目的,私有继承是一种组合形式.正常组成: class World { State state; public: void foo() { state.bar(); state.baz(); and so on } }; 也就是说,世界知识分子是使用一个国家实现的,外界不知道世界是如何实现的. 与 class World : private State { public: void foo() { bar(); baz(); and so on } }; 也就是说,世界知道这是一个国家实行的,外界不知道如何实施.但是您可以选择性地暴露State的接口部分,例如使用State :: bar;在公共部分的世界定义.效果就好像你在世界上辛苦地编写了一个函数(或几个重载),每个函数都在State上同一个函数. 除了避免打字之外,私人继承的一个常见用法是当类状态为空时,即没有数据成员.那么如果它是世界的成员,它必须占据一定的空间(不可否认,取决于对象布局,这可能是空格,否则就是填充,所以它不一定会增加世界的大小),但如果它是一个基类那么一个叫做“空基类优化”的东西就开始了,它可以是零大小.如果你创建了很多对象,这可能很重要.私有继承能够进行优化,但外部世界不会推断出一个“is-a”关系,因为它没有看到继承. 这是一个很好的区别 – 如果有疑问只是使用明确的组合.介绍继承来保存打字是非常好的,直到它有一些意想不到的后果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |