织梦CMS - 轻松建站从此开始!

罗索

C++接口的设计和声明

落鹤生 发布于 2012-12-25 10:46 点击:次 
任何接口设计的一个准则:让接口容易被正确使用,不容易被误用。理想上:如何客户企图使用某个接口缺没有获得他所预期的行为,这个代码不该通过编译;如果代码通过了编译,他的行为就该是客户所想要的。
TAG:

任何接口设计的一个准则:让接口容易被正确使用,不容易被误用。

理想上:如何客户企图使用某个接口缺没有获得他所预期的行为,这个代码不该通过编译;如果代码通过了编译,他的行为就该是客户所想要的。

1. 导入外覆类型(wrapper types)

2. 让types容易被正确使用,不容易被误用。尽量领你的types行为与内置types一致。

3. 设计class犹如设计type

新type的对象应该如何被创建和销毁?(自己设计operatornew,operatornew[],operator delete和operator delete[])

对象的初始化和对象的复制该有什么样的差别?对应于不同的函数调用

新type的对象如果被passed by value ,意味着什么

什么是新type的“合法值”?(??)

你的新type需要配合某个继承图系吗?

你的心type需要什么样的转换

什么样的操作符合函数对此新type而言是合理的

什么样的标准函数应该驳回

谁该取用新type的成员

什么是新type的未声明接口

你的新type有多么一般化

你真的需要一个新type吗

 

一、宁以pass-by-reference-to-const 替换 pass-by-value

1.效率高,没有任何构造函数或析构函数被调用,因为没有任何新对象被创建。

2. by refrenece方式传递参数还可以避免对象slicing 问题

二、必须返回对象时,别妄想返回其reference

所有用上static对象的设计,会造成多线程安全性的怀疑。

三、将成员变量声明为private:

1. 可以实现出“不准访问”、“只读访问”、“读写访问”、“惟写访问”

2. 封装:它使我们能够改变事物而只影响有限客户。

将成员变量隐藏在函数接口的背后,可以为“所有可能的实现”提供弹性。如:变量被读或被写时通知其他对象、可以验证class的约束条件以及函数的前提和事后转帖;以及在多线程环境执行同步控制。。。。等。

四、宁以non-member、non-friend替换member函数

  1. namespace WebBrowserStuff{ 
  2.         class WebBrowser{...}; 
  3.         void clearBrowser(WebBrowser& wb); 

五、若所有参数皆需要类型转换,请为此采用non-member函数

  1. class Rational { 
  2. ... 
  3.  
  4. const Rational operator*(const Rational& lhs,const Rational& rhs) 
  5. return Rational( lhs.numerator()* rhs.numerator()
  6. ,lhs.denominator()*rhs.denominator() ); 
  7.  
  8. Rational oneFourth(1,4); 
  9. Rational result; 
  10. result = oneFourth * 2; 
  11. result = 2*oneFourth; 

 六、考虑写出一个不抛异常的swap函数

(zhuky)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201212/16436.html]
本文出处:CSDN博客 作者:zhuky 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容