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


相关推荐

  • Python中线程同步与线程锁「建议收藏」

    Python中线程同步与线程锁「建议收藏」文章目录Python中线程同步与线程锁线程同步threading.Event对象threading.Timer定时器,延迟执行threading.Lock锁可重入锁RLockCondition条件锁,等待通知therading.Semaphore信号量threading.BoundedSemaphore有界信号量Python中线程同步与线程锁线程同步概念*线程同步,线程间协同,通过某种技…

    2022年6月21日
    27
  • NSGA2算法及其代码

    NSGA2算法及其代码本人最近研究NSGA2算法,网上有很多示例代码,但是基本没有注释,代码看起来很头疼,因此我最近把整个代码研读了一遍,并做上中文注释,希望可以帮助到一些和我一样的初学者们。贴出代码之前,首先介绍一下NSGA2遗传算法的流程图:流程图中我把每个详细的步骤用号码标出来,对应下文的代码部分。首先贴出主函数代码,对应整个流程图:functionnsga_2_optimization%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%…

    2022年5月12日
    51
  • Java FileInputStream默认编码方式

    Java FileInputStream默认编码方式使用如下代码测试:InputStreamis=newFileInputStream(newFile(“C:\\Users\\Administrator\\Desktop\\test1.txt”));    byte[]bs=newbyte[4096];    intlen=is.read(bs);    System.out.pri

    2022年5月6日
    108
  • 微信公众平台开发——微信授权登录(OAuth2.0)

    微信公众平台开发——微信授权登录(OAuth2.0)

    2021年10月25日
    43
  • 矩阵等价-相似-合同

    矩阵等价-相似-合同1.矩阵等价2.矩阵相似3.矩阵合同矩阵等价定义如果矩阵A经过有限次初等行变换变成矩阵B,就成矩阵A与B行等价。如果矩阵A经过有限次初等列变换变成矩阵B,就成矩阵A与B列等价。如果矩阵A经过有限次初等变换变成矩阵B,就称矩阵A与B等价。性质反身性:A~A对称性:若AB,则BA传递性:若AB,BC,则A~C推论:有两个m×n阶矩阵A和B,如果这两个矩阵满足B=QAP(P是n×n阶可逆矩阵,Q是m×m阶可逆矩阵),那么这两个矩阵之间是等价关系。r(A)=r(B),且A与B为同型矩阵。

    2022年10月29日
    0
  • bootstrap的datetimepicker_bootstrap日期选择器

    bootstrap的datetimepicker_bootstrap日期选择器先说datepicker。github上的地址是:https://github.com/eternicode/bootstrap-datepicker。效果如下:在bundle里面引用添加js和

    2022年8月5日
    2

发表回复

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

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