• 想写篇技术性散文


    突然好想写篇散文,可是脑子里筹集的都是些技术性文字。工作所需,那就顺手组织一下吧。

    C++封装成员的访问控制

    封装往往生成一个类型,可以是个union,struct/class;C++所有定义都会存在应用范围,这个被我们称作作用域概念始终都影响着我们的编译链接工作;以往C原始只有三个作用域概念,文件域,全局域,局部区域;C++在此基础上,加上命名的特性,那就告诉我们更方便的组织我们代码单元与粒度控制;除了namespace, 凡事有定义范围的,有命名都是个名字域。值得强调的概念就是Scope约束作用。

    成员修饰

    public:

    对外公开,可通过域名访问或对象访问;

    protected:

    限制在类属范围内可访问;这就要求是所在类范围或该类的扩展范围;

    private:

    完全受限于该类定义范围。

    扩展控制

    public:

    继承成员的修饰特性不变;

    protected:

    继承成员中除了private成员其他都变更为类属保护范围;

    private:

    继承成员的修饰特性都锁定为private。

    PIMPL模式

    私有实现模式,是提高工程编译效率的一种办法。提供编译效率,首先就要隔离名字污染,减少编译器的范围辨别的负荷。

    这种模式只适用于明确的稳定可靠的OO设计方案,如果不可靠不稳定,接口文件变来变去,不断改版,那这种模式不适于工作,因为私有实现必然引用不少量的中间代码,这个工作量大了就不可无视。所以要求设计者有成熟的OO设计能力。OO设计的本质就是构建一个易理解的可动作的流程模型,所以说不能控制范围不能把握视角的人不要在大家面前谈设计。

    往往为了隔离,我们看到的封装体是这样的;

    // target.h
    interface ITarget;
    
    class CTarget : private ITarget
    {
    public:
        CTarget(...);
        // 代理模式
        ...
    
    private:
        ITarget* p;
    }
    // target.cpp
    struct PImpl : ITarget
    {
        /* data */
        ...
    };
    // PImpl, Private Implementation
    ...
    
    CTarget::CTarget(...)
    {
        p = new PImpl;// 准备实际对象
    }

    这样,这个隔离了实现与接口声明两块内容。实现部分已经限定在目标cpp内部,一个cpp就是编译单元。

    C# partial 关键字

    这个关键字出现在C#语言特性中,表示一个封装体,可以分成多部分声明。这太棒了,这教我们更易于分离关注点,信息量的分类控制与完整功能的聚合。

    设想,如果C++有一天支持这样的特性。对我们有什么要什么样的益处?

    有了部分声明的支持,那对于封装私有那部分我就完全不必要声明在接口文件中了,当然除了数据成员,数据成员分割那C++就不是C++,因为sizeof是个编译期运算,一个类型在数据结构上必须是完整的。这样才能计算他的尺寸。

    当然说,允许分离是不错的特性,不过编译器需要考虑的类属关系,因为virtual关键字,对于偏移量是需要编译推算。因此说只要类属多态的虚函数是必须声明在.h中的。

    保留记录

    位操作

    设置位:OR

    排除位:XOR

    检测位:AND

    代码品质

    就近声明原则

    最小依赖规范

    两句话

    通过着装与打扮,观察一个人的品味与风格;

    通过举止与谈吐,把握一个人的性情与动态;

  • 相关阅读:
    人月神话阅读笔记01
    梦断代码阅读笔记03
    构建之法阅读笔记03
    构建之法阅读笔记02
    个人课程总结
    第十六周进度总结
    计算最长英语单词链
    第十五周进度总结
    浪潮之巅阅读笔记03
    冲刺2-10
  • 原文地址:https://www.cnblogs.com/qianwen36/p/4470525.html
Copyright © 2020-2023  润新知