设为首页 加入收藏

TOP

10.2.4 如何处理C++中的类
2013-10-07 00:39:54 来源: 作者: 【 】 浏览:53
Tags:10.2.4 如何 处理

10.2.4 如何处理C++(www.cppentry.com)中的类

注意,除了关于异常(Exception)的部分,大部分其他原则对C#也适用。

1.类

(1)使用类来封装面向对象的概念和多态(Polymorphism)。

(2)避免传递类型实体的值,应该用指针传递。换句话说,对于简单的数据类型,没有必要用类来实现。

(3)对于有显式的构造和析构函数,不要建立全局的实体,因为你不知道它们在何时创建和消除。

(4)只有在必要的时候,才使用“类”。

2.Class vs. Struct

如果只是数据的封装,用Struct即可。

3.公共/保护/私有成员Public、Private和Protected

按照这样的次序来说明类中的成员:public、protected、private

4.数据成员

(1)数据类型的成员用m_name说明。

(2)不要使用公共的数据成员,要用 inline 访问函数,这样可同时兼顾封装和效率。

5.虚函数Virtual Functions

(1)使用虚函数来实现多态(Polymorphism)。

(2)只有在非常必要的时候,才使用虚函数。

(3)如果一个类型要实现多态,在基类(Base Class)中的析构函数应该是虚函数。

6.构造函数Constructors

(1)不要在构造函数中做复杂的操作,简单初始化所有数据成员即可。

(2)构造函数不应该返回错误(事实上也无法返回)。把可能出错的操作放到HrInit()或FInit()中。

下面是一个例子(见代码清单10-3):

代码清单10-3

 

7.析构函数

(1)把所有的清理工作都放在析构函数中。如果有些资源在析构函数之前就释放了,记住要重置这些成员为0或NULL。

(2)析构函数也不应该出错。

8.New和Delete

(1)如果可能,实现自己的 New/Delete,这样可以方便地加上自己的跟踪和管理机制。自己的 New/Delete 可以包装系统提供的New/Delete。

(2)检查New的返回值。New不一定都成功。

(3)释放指针时不用检查NULL。

9.运算符(Operators)

(1)在理想状态下,我们定义的类不需要自定义操作符。只有当操作符的确需要时。

(2)运算符不要做标准语义之外的任何动作。例如,“==”的判断不能改变被比较实体的状态。

(3)运算符的实现必须非常有效率,如果有复杂的操作,应定义一个单独的函数。

(4)当你拿不定主意的时候,用成员函数,不要用运算符。

10.异常(Exceptions)

(1)异常是在“异乎寻常”的情况下出现的,它的设置和处理都要花费“异乎寻常”的开销,所以不要用异常作为逻辑控制来处理程序的主要流程。

(2)了解异常及处理异常的花销,在 C++(www.cppentry.com)语言中,这是不可忽视的开销。

(3)当使用异常时,要注意在什么地方清理数据。

(4)异常不能跨过 DLL 或进程的边界来传递信息,所以异常不是万能的。

11.类型继承(Class Inheritance)

(1)当有必要的时候,才使用类型继承。

(2)用Const标注只读的参数(参数指向的数据是只读的,而不是参数本身)。

(3)用Const标注不改变数据的函数。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle新版Tuxedo 领先分布式事务.. 下一篇给C++初学者的50条建议

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: