多封装,少开放。强烈建议C++标准添加class之间的注入机制「建议收藏」

多封装,少开放。强烈建议C++标准添加class之间的注入机制

大家好,又见面了,我是全栈君。

近日在改动了一下下引擎代码(为了自己的组件),发现有些接口是仅仅有特定类及其内部函数才去訪问,却不使用友元声明的形式进行数据訪问——当然使用了普通非virtual的形式也就是意味着不建议重载。

故此:

1、建议派生类(或同意)重载的声明为虚函数即virtual类型,

2、强制派生类实现的声明为纯虚函数

3、不希望派生类重载或覆盖的函数则为普通类,假设訪问群体有限定范围或者范围比較少。能够考虑添加友元+protected的方式进行訪问控制,从而实现有效设计信息传达。可是有的时候我们不能保证可能须要訪问的友元,或者说另外的类不是我们设计的。就会出现开篇提到的现象。鉴于这样的情况,我认为C++应该添加一个注入机制,在编译期间同意其它类去訪问另外的类的protected函数,而不是只通过继承。或许说友元已经足够了,可是友元的局限太明显了。

 

机制实现细节例如以下:

regAble class A

{

protected:

void visit;

//something else

};

class B:reg A

{

A * p;

void visit()

{

p->visit();

}

}

4、假设某个操作同意重写,最好使用virtual的形式,即便丧失了小部分性能,可是还是能够原先多样化的操作。这样子和3产生强烈的对照,降低代码设计相干,降低思维耦合

以下这段是一段很优秀的代码:

/**
     * Sets the arrival order when this node has a same ZOrder with other children.
     *
     * A node which called addChild subsequently will take a larger arrival order,
     * If two children have the same Z order, the child with larger arrival order will be drawn later.
     *
     * @warning This method is used internally for localZOrder sorting, don't change this manually
     *
     * @param orderOfArrival   The arrival order.
     */
    void setOrderOfArrival(int orderOfArrival);

当我看到这种凝视。我马上明确自己是否须要处理改接口。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115746.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • common-dbutils.jar学习心得

    common-dbutils.jar学习心得

    2021年5月24日
    203
  • 持续火热招生!同济首推区块链人才培训8月开班

    持续火热招生!同济首推区块链人才培训8月开班全国首家区块链教练式培训

    2022年7月25日
    20
  • ipv4和ipv6对比(IPV4)

    TCP/IP的心脏是互联网层,这一层主要由IP和ICMP两个协议组成。IP相当于OSI参考模型中的第三层——网络层。而网络层的作用是实现终端节点之间的通信。这种终端节点之间的通信也叫‘点到点’通信。IP地址用于连接在网络中的所有主机中识别出进行通信的目标地址。谷在tcp/ip通信的所有主机中必须设置IP地址。路由控制、多条路由和路由控制表使得数据包可以成功抵达要去的地方。路由控制表记录着此…

    2022年4月15日
    187
  • Oracle DBA 路途遥远「建议收藏」

    Oracle DBA 路途遥远「建议收藏」好用的OracleDBA为什么这么难找? 这不但是很多CIO的痛,也是很多IT主管搅尽脑汁也解决不了的问题。可那么多从ORACLE培训班拿到OCP认证的人跑哪里去了呢? 小白是一个拥有OCP证照,且对数据库本身的架构、运作原理有一定了解的数据库管理员。原以为一切都没问题的,无奈小白刚一就任,就面临到替换公司数据库系统主机的问题。小白没有程序开发与主机系统管理等经验,小白是那种一毕

    2022年9月26日
    2
  • SpringBoot 自动配置原理[通俗易懂]

    SpringBoot 自动配置原理[通俗易懂]创建项目通过SpringInitialize创建SpringBoot项目而接下来要说的是关于配置文件的事情。关乎配置文件可以参考官方文档。对于配置文件来说到底在配置文件里面可以进行配置那些内容,自动配置的原理又是什么东西呢?自动配置原理在SpringBoot启动的时候加载主配置类,开启了自动配置的功能,通过@EnableAutoConfiguration注解开启自动配置的功能。@Im…

    2022年6月17日
    23
  • 如何在mac上安装虚拟机搭载Windows「建议收藏」

    如何在mac上安装虚拟机搭载Windows「建议收藏」一、下载虚拟机官方下载网址https://www.vmware.com/二、下载想要安装的Windows版本推荐下载网址https://msdn.itellyou.cn/(msdn建议收藏,相当全的系统)直接将地址复制到迅雷下载即可三、双击下载完成的vm虚拟机,拖到app中如果VM提示找不到可以连接的有效对等进程:…

    2025年11月6日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号