多封装,少开放。强烈建议C++标准增加class之间的注入机制
来源:互联网 发布:apache禁止访问根目录 编辑:程序博客网 时间:2024/06/05 02:54
近日在修改了一下下引擎代码(为了自己的组件),发现有些接口是只有特定类及其内部函数才去访问,却不使用友元声明的形式进行数据访问——当然使用了普通非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);
当我看到这样的注释,我立即明白自己是否需要处理改接口。
0 0
- 多封装,少开放。强烈建议C++标准增加class之间的注入机制
- C标准之间的差异
- 标准C库封装的样例
- Json web token-基于JSon在网络应用之间传递声明的开放标准
- 强烈建议:撰写博客增加自动保存功能
- class类的封装
- 强烈建议
- html 元素class 多个class之间空格的含义
- 封装机制封装的概念
- 22、C#:利用接口增加封装安全性
- CVS:版本控制的开放标准
- CVS:版本控制的开放标准
- CVS:版本控制的开放标准
- 封装的线程注入类
- Struts2的自动封装注入
- 取舍之间:techmeme少就是多
- 取舍之间:techmeme少就是多
- 取舍之间:techmeme少就是多
- Gson实体类创建过程
- 【二叉树】UVA112
- Linux系列:linux学习之路(入门类、编程类、内核类、工具类……)
- 调用WebService查看QQ号码状态
- 一些正则表达式的使用
- 多封装,少开放。强烈建议C++标准增加class之间的注入机制
- 怎么用U盘装系统
- Log详解
- 结构体
- hdu 1232 畅通工程(图中无回路)
- 最小序列-- LCA
- poj 1952 BUY LOW, BUY LOWER dp
- how happy how comes
- nyoj1138 The number of maximum subset 递推