多封装,少开放。强烈建议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);

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

时间: 2024-12-23 23:00:45

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

程序设计少出现Bug建议

程序设计少出现Bug建议 1. 在程序中分模块进行设计,要对各个子模块进行全方位测试 2015-12-27 关键分别需要对各个模块要进行测试到位,然后在进行全局程序测试,这样程序效率很高. 因为,如果子模块程序有隐藏bug,在中程序全局测试,则查找异常很耗费时间!!!!!!! 2. 数组上下线问题,不能越界如: m_pFrameVectors[(i+1)%m_frameVectSize]

管理口令(P):[INS-30011] 输入的 ADMIN 口令不符合 Oracle 建议的标准。

Oracle数据库的密码有它的一套规范,我们在安装Oracle的时候,需要设置Sys,System等一系列系统级账号的密码.如果在设置时,密码没有符合Oracle规定的标准,则将提示:管理口令(P):[INS-30011] 输入的 ADMIN 口令不符合 Oracle 建议的标准. 那么它的这套标准到底是怎么样的呢?我们试一试就知道了.纯字母.纯数字肯定是不行的:字母加数字的组合,也没能通过.最低通过的小写字母+数字+大写字母,当然,如果能有特殊字符,那就更好了. 其实,虽然Oracle提示我们

java数据类型,hibernate数据类型,标准sql数据类型之间的对应表

Hibernate API简介 其接口分为以下几类: l         提供访问数据库的操作的接口: l         用于配置Hibernate的接口: l         回调接口 l         扩展Hibernate的功能的接口. 这些接口大多数位于net.sf.hibernate包中 Hibernate的核心接口 5个核心接口: l         Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象. l   

并查集类的c++封装,比较union_find algorithm四种实现方法之间的性能差别

问题描述: 在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构: Find:确定元素属于哪一个子集.它可以被用来确定两个元素是否属于同一子集: Union:将两个子集合并成同一个集合: 实现并查集的关键是实现union-find algorithm, 本文根据常用的四种算法,实现了这个类,具体算法实现请参看维基百科: 制造测试数据集,

多封装,少开放

近日在修改了一下下cocos2d-x的引擎代码(为了自己的组件),发现有些类的访问形式比较怪异,明明有些接口是只有特定类及其内部函数才去访问,却不使用友元声明的形式进行数据访问--当然使用了普通非virtual的形式也就是意味着不建议重载. 故此: 1.建议派生类(或允许)重载的声明为虚函数即virtual类型, 2.强制派生类实现的声明为纯虚函数 3.不希望派生类重载或覆盖的函数则为普通类,如果访问群体有限定范围或者范围比较少,可以考虑增加友元+protected的方式进行访问控制,从而实现有

INS-30011 输入的ADMIN口令不符合Oracle建议的标准

1.错误描述 2.错误原因 由于在设置密码时,首个字符为数字,导致出错 a.必须以字母开头 b.长度不超过30个字符 c.只能包含字母.数字和_.$.# d.不能使用关键字和保留字 3.解决办法 重新设置密码

Java,Hibernate,标准sql数据类型之间的对应表

(2010-07-14 19:53:50) 转载▼ 标签: 杂谈 分类: JAVA Hibernate API简介 其接口分为以下几类: l         提供访问数据库的操作的接口: l         用于配置Hibernate的接口: l         回调接口 l         扩展Hibernate的功能的接口. 这些接口大多数位于net.sf.hibernate包中 Hibernate的核心接口 5个核心接口: l         Configuration接口:配置Hiber

收派标准添加窗口制作 jQuery EasyUI window

如何用 easyui 制作窗口 ? 默认窗口自带四个按钮在窗口出现的时候,页面中内容不可操作(遮罩)?窗口在页面加载后,不显示?如何显示窗口? 原文地址:https://blog.51cto.com/13587708/2418481

IE盒模型和标准盒模型之间的差别

原文地址:https://www.cnblogs.com/shun1015/p/12411273.html