免费注册 查看新帖 |

Chinaunix

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

[C] 我决定将C++当做带Class的C来用~~ [复制链接]

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
101 [报告]
发表于 2014-11-20 21:02 |只看该作者
回复 99# lost_templar

你说的“静多态”是这种东西吧

  1. template<typename T>
  2. struct Impl : public T {
  3. }
复制代码
当你想在Impl里调用T的成员函数时,还是免不了要用
  1. static_cast<T*>(this)->method_of_T(...);
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
102 [报告]
发表于 2014-11-20 21:45 |只看该作者
回复 101# windoze


    是的,大致是这样。

static_cast 是免不了的,但是没有虚函数的开销

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
103 [报告]
发表于 2014-11-20 21:51 |只看该作者
回复 102# lost_templar

开销还在其次,关键是太丑。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
104 [报告]
发表于 2014-11-20 22:19 |只看该作者
windoze 发表于 2014-11-20 21:51
回复 102# lost_templar

开销还在其次,关键是太丑。


为什么你觉得太丑?我觉得这样写很舒服

设想你一个类有100个方法,声明在一个头文件里边

  1. struct big_class
  2. {
  3.     virtual void method_1(){...}
  4.     virtual void method_2(){...}
  5.     //......
  6.     virtual void method_100{...}
  7. };
复制代码
这个文件会非常庞大。


然后再对这个 big_class 做点继承或者维护什么的,更是非常麻烦。


而如果将这100个接口分散到 100 个不同的文件中去

  1. //file method_1.hp
  2. template< tyename T >
  3. struct method_1_impl
  4. {
  5.     void method_1(){....}
  6. };
  7. //....
  8. //file method_100.hpp
  9. template< tyename T >
  10. struct method_100_impl
  11. {
  12.     void method_100(){....}
  13. };
复制代码
那么使用的时候只要选择必要的几个 method 组合一下就成了

  1. struct my_text_editor : method_23_impl<my_text_editor>, method_72_impl<my_text_editor>
  2. {};

  3. my_text_editor mte;
  4. mte.method_23();
  5. mte.method_72();
复制代码
在我看来,这比继承一个有 100 虚函数的类要优雅得多。




求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
105 [报告]
发表于 2014-11-22 12:57 |只看该作者
深有同感,新在很多的程序员,开口框架,闭口框架,好像有多高大上的样子,好像知道几个框架就很牛逼的样子,我不会C++,只用C,我知道在嵌入式这个方向,根本不需要这些个框架爱回复 49# windoze


   

论坛徽章:
0
106 [报告]
发表于 2014-12-03 12:44 |只看该作者
慢慢你就会发现,连class都不好用。

在c里,其实每个.c文件就是class,私有的函数加static。

论坛徽章:
0
107 [报告]
发表于 2014-12-03 22:56 |只看该作者
C++个人认为功能还是比较强大的,有些接口比较方便,如果使用C实现会非常麻烦,具体得看你的工作和coding的内容了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
108 [报告]
发表于 2015-01-04 16:08 |只看该作者
lost_templar 发表于 2014-11-20 22:19
为什么你觉得太丑?我觉得这样写很舒服

设想你一个类有100个方法,声明在一个头文件里边这个文件会非 ...
这你得对这个文件也太多了,大的也可以将他拆成几个类来实现,每个类实现一个特定功能,用起来还是比文件的好。可能每个人编程习惯不一样,没有哪个好哪个坏,如果是大型项目组,用类还是好很多,大家都有面向对象的基础,面向过程编程,学校早就不教了。你非要吧文件说成对象,也不是不可以,但这要很深的功底,因为文件没有规范,类是有规范,一个类就是干一个活,不管你怎么扩展这个类,反正干的都是这个类应该干的活,而文件虽说也可以,但新学者没这个感念,肯定吧代码搞得一团糟,也不利于大型项目的开发,比如我们要实现一个功能,组长只需要写一个接口,下面的人继承这个接口,里面必须要实现这些函数,先不论他代码写的怎么样,至少他在按照组长的思路在写这个,最后出来的东西也是会符合技术架构图上规定的规范的。新人进来一看架构图很容易上手。文件的话就没办法了。

论坛徽章:
0
109 [报告]
发表于 2015-01-28 10:51 |只看该作者
回复 2# hellioncu


    用vc写法 和C写法有出入,还不如直接用C语法写来的好 效率上说不定还快些,记也好记

论坛徽章:
0
110 [报告]
发表于 2015-09-08 10:18 |只看该作者
好好学习Clean code这本书的思想完,就不会这样认为了。除非你写得程序一直都很小型,或者生命周期都很短。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP