免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: art_codes
打印 上一主题 下一主题

[C++] 确认一下c++中不能使用interface(如java)那样的功能把 [复制链接]

论坛徽章:
0
341 [报告]
发表于 2009-03-27 21:43 |只看该作者
原帖由 OwnWaterloo 于 2009-3-27 21:38 发表


那就约等于放弃了C程序员引以为豪的效率咯?
所以, 在说用C实现OO的时候,  请稍微提及这些方面。 否则就有误导人的嫌疑了。



当然, C++完全追求效率, 在运行时几乎不带有用的类型信息 ……
有时 ...

还是那句话,C实现OO方法多态的运行效率不比C++差。

论坛徽章:
0
342 [报告]
发表于 2009-03-27 21:50 |只看该作者
原帖由 OwnWaterloo 于 2009-3-27 21:38 发表


那就约等于放弃了C程序员引以为豪的效率咯?
所以, 在说用C实现OO的时候,  请稍微提及这些方面。 否则就有误导人的嫌疑了。



当然, C++完全追求效率, 在运行时几乎不带有用的类型信息 ……
有时 ...


没觉的C语言以XXX为毫的,是谁说的,站出来
如果以效率为毫,当年Unix就拿汇编写了,也就没有C语言了

我记得以前在CU上火爆的OIOIC用宏在C下实现了多继承 所以你要说C写OO程序没效率俺可不能同意 你去查查,当年那贴貌似比这个还火

论坛徽章:
0
343 [报告]
发表于 2009-03-27 21:52 |只看该作者
我倒觉得现在让我写C的OO代码的话,我宁可用xml来提供运行时类型信息

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
344 [报告]
发表于 2009-03-27 22:11 |只看该作者
原帖由 reiase 于 2009-3-27 21:52 发表
所以你要说C写OO程序没效率俺可不能同意  你去查查,当年那贴貌似比这个还火


嗯, 我错了, 如果是yhb04那种实现方式, 我自己都不同意了
《OOC》还没看完, 不过前章说的实现方式, 就不如yhb04那种效率高。

原帖由 reiase 于 2009-3-27 21:52 发表
我倒觉得现在让我写C的OO代码的话,我宁可用xml来提供运行时类型信息


那直接使用一门动态类型语言, 不更快更好? ruby?

论坛徽章:
0
345 [报告]
发表于 2009-03-27 22:12 |只看该作者
原帖由 OwnWaterloo 于 2009-3-27 21:42 发表


嗯, 确实不需要数组, 是我想错了。


我把这个例子补充完整一点 :

struct file_ops {
  int (*read)(int fd, char* buff, int count);
  int (*write)(int fd, char* buff, nt count);
  int ( ...

呵呵,其实我的代码还有问题,具体的接口中应该包括C++中类似this指针。

论坛徽章:
0
346 [报告]
发表于 2009-03-27 22:18 |只看该作者

回复 #339 OwnWaterloo 的帖子

我不知道他指的内核是什么。   但是, windowsNt内核里提供的对象, 就是windows内核对象的意思吧?
Process, Thread, Mutex 这些东西?

先不管它们算不算OO。

HANDLE h1 = CreateProcess( ... );
HANLDE h2 = (HANDLE) _beginthreadex( ... );
HANDLE h3 = CreateMutex( ... );

这里就会发生类型信息丢失。

以至于:
ReleaseMutex(h1); 这种错误, 只有在运行时(而非编译时), 才能暴露出来。

我是没看过WindowsNT内核的代码。
不过我认为它说的对象其实就是一个结构体,老外很喜欢使用object这个词,所以一翻译。。
至于它的HANDLE实际上跟UNIX的file descriptor一样。内核不会把自己的数据结构直接给用户。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
347 [报告]
发表于 2009-03-27 22:25 |只看该作者
原帖由 yhb04 于 2009-3-27 22:12 发表

呵呵,其实我的代码还有问题,具体的接口中应该包括C++中类似this指针。


你的意思是 :
struct file_ops {
  int (*read)(struct file*, char* buff, int count);
  int (*write)(struct file*, char* buff, nt count);
  /* ... */
};

这样?

给客户端提供的是 :
int read( struct file* f, char* buf, int count) {
    return f->op->read( f, buf, count );  // 这一坨东西, 不应该交给用户去写吧。
}
这样?


我觉得你在335楼的设计更好一些。
struct file_ops {
  int (*read)(int fd, char* buff, int count);
  int (*write)(int fd, char* buff, nt count);
  /* ... */
};

int read( struct file* f, char* buf, int count) {
    return f->op->read( f->fd, buf, count );
}

这样, 实现 read, write 的时候, 将不依赖struct file这个东西。 int fd才是最抽象的handle。

[ 本帖最后由 OwnWaterloo 于 2009-3-27 22:27 编辑 ]

论坛徽章:
0
348 [报告]
发表于 2009-03-27 22:28 |只看该作者
原帖由 OwnWaterloo 于 2009-3-27 22:25 发表


你的意思是 :
struct file_ops {
  int (*read)(struct file*, char* buff, int count);
  int (*write)(struct file*, char* buff, nt count);
  /* ... */
};

这样?

给客户端提供的是 :
i ...

是的,应该加上file*,等价于C++中的this指针。

论坛徽章:
0
349 [报告]
发表于 2009-03-27 22:32 |只看该作者
原帖由 yhb04 于 2009-3-27 22:18 发表
我不知道他指的内核是什么。   但是, windowsNt内核里提供的对象, 就是windows内核对象的意思吧?
Process, Thread, Mutex 这些东西?

先不管它们算不算OO。

HANDLE h1 = CreateProcess( ... );
HANL ...

你可以参考这个评论:http://www.douban.com/review/1562768/
看看windows是不是具备面向对象的特点
继承,封装,抽象,以及消息传递机制那个没有。

论坛徽章:
0
350 [报告]
发表于 2009-03-27 22:35 |只看该作者
浪费了较多时间在这个灌水贴上了, 睡觉去,不打算跟帖了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP