免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1479 | 回复: 7
打印 上一主题 下一主题

[C++] 单口类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-28 22:59 |只看该作者 |倒序浏览
设想一个类具有如下形式

class A
{
public:
      func1(int nPara);
      func2(int nPara);
      func3(int nPara);
      func4(int nPara);
}


他也可以这样一种形式

class A
{
public:
      func(int funcNo,int para);
private:
      func1(int nPara);
      func2(int nPara);
      func3(int nPara);
      func4(int nPara);
}

A::func(int funcNo,int para)
{
     switch(funcNo)
     case 1:
            return func1(para);

     case 2:
            return func2(para);

     case 3:
            return func3(para);

     case 4:
            return func4(para);
}


大家能大概讨论一下这么干的好坏吗?

我觉得应该应该有以下的事项需要注意。


1、使用形式2,参数必须一致,或者使用复杂的控制机制保证程序的安全。
2、形式2具有更大的灵活性。因为他抽象了类的一个特性——“输入”。
3、似乎形式2可以成为所有类的一个基类?

大家说说吧。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2008-12-29 08:57 |只看该作者
形式2应该是对象封装的一个反面例子

论坛徽章:
0
3 [报告]
发表于 2008-12-29 09:38 |只看该作者

回复 #2 hellioncu 的帖子

说的好.
应该用形式1, 形式1函数名表明了函数的意思, 形式2要一个额外的参数表明. 你说那个好呢?

论坛徽章:
0
4 [报告]
发表于 2008-12-29 10:20 |只看该作者
模块封装得好坏,取决于使用这个模块时需要记忆信息量。需要记忆的信息量越少,这个模块的封装就越好。我认为这个形式的封装好:

A::func(int funcNo,int para)
{
     switch(funcNo)
     case 1:
            return func1(para);

     case 2:
            return func2(para);

     case 3:
            return func3(para);

     case 4:
            return func4(para);
}

论坛徽章:
0
5 [报告]
发表于 2008-12-29 10:25 |只看该作者
我倾向于第二种

论坛徽章:
0
6 [报告]
发表于 2008-12-29 10:44 |只看该作者
原帖由 qvppvq 于 2008-12-29 10:20 发表
模块封装得好坏,取决于使用这个模块时需要记忆信息量。需要记忆的信息量越少,这个模块的封装就越好。我认为这个形式的封装好:

A::func(int funcNo,int para)
{
     switch(funcNo)
     case 1:
            return func1(para);

     case 2:
            return func2(para);

     case 3:
            return func3(para);

     case 4:
            return func4(para);
}


这种封装让用户少计了许多信息,比如fun1~4的返回值类型、参数类型等等。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2008-12-29 11:19 |只看该作者
第二种明显是面向过程的一种思想。如果让我来设计,可能会设计成A作为基类,A::func,派生A1~A4重载func。

论坛徽章:
0
8 [报告]
发表于 2008-12-29 11:51 |只看该作者
原帖由 hellioncu 于 2008-12-29 11:19 发表
第二种明显是面向过程的一种思想。如果让我来设计,可能会设计成A作为基类,A::func,派生A1~A4重载func。


面向对象就是给模块与模块之间说的,不是模块内部的面向对象,模块内部不可能面向对象地去设计。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP