想写篇技术性散文

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

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

代码品质

就近声明原则

最小依赖规范

两句话

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

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

原文地址:https://www.cnblogs.com/qianwen36/p/4470525.html