多封装,少开放。强烈建议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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【java并发编程】底层原理——用户态和内核态的区别

    【java并发编程】底层原理——用户态和内核态的区别一、背景–线程状态切换的代价java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统介入,需要在户态与核心态之间切换,这种切换会消耗大量的系统资源,因为用户态与内核态都有各自专用的内存空间,专用的寄存器等,用户态切换至内核态需要传递给许多变量、参数给内核,内核也需要保护好用户态在切换时的一些寄存器值、变量等,以便内核态调用结束后切换回用户态继续工作。synch…

    2022年9月18日
    4
  • javac 与 java的区别[通俗易懂]

    javac 与 java的区别[通俗易懂]java编译器名称是javac,是将源文件编译为字节码文件的程序,而java是java解释器的名称,也就是解释和执行字节码文件的程序。注意:::java源文件必须是具有  .java 扩展名java字节码文件必须具有  .class 扩展名 javac可以将java源文件编译为class字节码文件如javacHelloWorld.java运行javac命令后,如果成功编译没有错误的话…

    2022年5月15日
    57
  • 华为交换机不同网段互访_华为三层交换机实现不同vlan,不同网段的互通

    华为交换机不同网段互访_华为三层交换机实现不同vlan,不同网段的互通实验任务:1.不同vlan,不同网段实现互通;2.路由AR11用默认路由配置;3.LSW8实现三层交换机功能;如下华为拓扑图:配置思路:1.将LSW8看成一个路由器,LSW8下面连接(LSW7和LSW6)的设备都看一个pc,这样就成两个路由互联,下面各接一个pc这样只需让左边的PC7和右边的PC8互通即可搞定:如下图:2.LSW8是三层交换机,先不看192.168.6.0网段和192.168.7….

    2022年9月11日
    3
  • 我的ubuntu6.10 源(source.list)

    我的ubuntu6.10 源(source.list)

    2021年4月28日
    119
  • VRRP(超详细)

    VRRP(超详细)12VRRP12 1 为什么要有 vrrp 主要为了防止单点故障既有网关冗余 当网关发生故障的时候 能让 PC 快速的切换 12 2VRRP 的概念通过 VRRP 将俩台路由器虚拟构成一台路由器 俩台路由器的浮动地址 即是路由器的虚拟地址 浮动地址也是下行地址的网关 IP 通俗的讲 VRRP 实现了一个组中的路由器 哪个路由器工作 哪个路由器作为备份 实际上 如果一个组中有俩个路由 其可以理解为三个路由

    2025年6月23日
    2
  • 挖矿区块链_传说中的区块链挖矿是什么?「建议收藏」

    挖矿区块链_传说中的区块链挖矿是什么?「建议收藏」对于区块链来说,挖矿是必须的吗?首先,我们来说下挖矿是什么?以比特币为例,每一笔交易发生后,并不算完成,交易数据必须写入数据库,才算成立,对方才能真正收到钱。首先,所有的交易数据都会传送到矿工那里。矿工负责把这些交易写入区块链。计算哈希的过程叫挖矿,计算哈希的机器就叫做矿机,操作矿机的人就叫做矿工。根据比特币协议,一个区块的大小最大是1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包…

    2022年5月8日
    39

发表回复

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

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