加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C子类访问修饰符?

发布时间:2020-12-16 03:14:31 所属栏目:百科 来源:网络整理
导读:我是C新手,我有很多关于OO语言的经验,如C/C++#/ Objective-C.现在我正在学习C. 我看到这个C代码: class World : public State { }; 看来,世界继续公开上课. 公共子类化?很难理解 这个功能的概念是什么? 这是有用还是需要的? 解决方法 对于关键字类定义的
我是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”关系,因为它没有看到继承.

这是一个很好的区别 – 如果有疑问只是使用明确的组合.介绍继承来保存打字是非常好的,直到它有一些意想不到的后果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读