C++“不只是”面向对象的语言

stereoMatching 2012-10-03 06:07:42
为何有不少人会认为C++“只是一种面向对象的语言”呢?
其实C++是各种抽象机制的综合体,OOP只是他支援的其中一种paradigm

这是C++之父的演讲,pdf
http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf

影片
http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11-Style
其中有一段提到“what is C++”?

如果只是将C++当成“纯面向对象的语言”,就太可惜了
C++支援的抽象机制,允许我们做出许多纯“面向对象”的思想做不到的事情
...全文
421 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctreewang 2012-10-06
  • 打赏
  • 举报
回复
你要这么说,就不用发明语言了,一直停留在汇编就可以了!!!语言是门技术。抽象只是为了让计算机和现实世界更加吻合。有一种思想就是两个事物中间可以加上胶合层 去解决问题,就这种思想[Quote=引用 15 楼 的回复:]

再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
[/Quote]
healer_kx 2012-10-06
  • 打赏
  • 举报
回复
Ruby也不错。
hnzmdzcm 2012-10-06
  • 打赏
  • 举报
回复
越高级的语言就越接近人类社会的种种现象,这正是C++的思想
stereoMatching 2012-10-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

C++要包罗万象还是怎么滴? 我觉得太复杂了.
[/Quote]
C++为了应付许多复杂的projects,所以提供各种不同的抽象机制
老大的理想是提供程序员足够的力量和工具,让他们可以随心所欲的表现出他们的意图
虽然老大的理想很好,可惜他的坚持也让C++的学习曲线变得陡峭许多

“包罗万象”是结果,不是目地
sergery 2012-10-06
  • 打赏
  • 举报
回复
C++要包罗万象还是怎么滴? 我觉得太复杂了.
jackyjkchen 2012-10-06
  • 打赏
  • 举报
回复
对啊,java使用者除非是做服务端的,大多不知道java也会内存泄漏,有一次我说了java的内存泄漏问题,反被一帮傻子当成了傻子……
stereoMatching 2012-10-06
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]

可惜的是C/C++作为二进制编译型语言,那些和操作系统关系紧密(意味着某些操作系统上可能压根就没这个功能)的都不能直接进入语言,导致C/C++的标准库贫乏

其实,所谓java初学者能做出挺像样的软件,C/C++初学者只能折腾算法/数据结构,并不是什么值得夸耀的事情,也不是C/C++的优势,根本原因就是标准库贫乏,屁事干不了而已……
[/Quote]

赞同,C++最大的缺点就是标准libs太小了,目前开发图形界面我都用Qt代劳

不过"java初学者能做出挺像样的软件"就不见得了
因为我发现很多java的使用者都不知道如何制造memory leak
甚至认为java不会有memory leak
ava初学者的界面看起来很绚丽,但是稳固与否却是个问号啊
jackyjkchen 2012-10-06
  • 打赏
  • 举报
回复
可惜的是C/C++作为二进制编译型语言,那些和操作系统关系紧密(意味着某些操作系统上可能压根就没这个功能)的都不能直接进入语言,导致C/C++的标准库贫乏

其实,所谓java初学者能做出挺像样的软件,C/C++初学者只能折腾算法/数据结构,并不是什么值得夸耀的事情,也不是C/C++的优势,根本原因就是标准库贫乏,屁事干不了而已……
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

太复杂,造成C++是一门专家预言。
[/Quote]太复杂,造成C++是一门专家语言。
  • 打赏
  • 举报
回复
太复杂,造成C++是一门专家预言。
newtee 2012-10-05
  • 打赏
  • 举报
回复
面向对象的基本概念:对象、类、消息
主要特征:封装、继承、多态
newtee 2012-10-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
[/Quote]这种思想是错误的
赵4老师 2012-10-05
  • 打赏
  • 举报
回复
再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
stereoMatching 2012-10-05
  • 打赏
  • 举报
回复
>对于一个C++盲所写的“C++只是一种面向对象的语言”没必要如此认真去对待。
我不知道他的水平在那里,不过有很多程序员都认为C++ == OOP的样子
之前去面试的时候,几乎每个面试官都这么认为
还有人问我,“C++少了virtual还剩什么?不就跟C没有差别了吗?”
我当时的感想是“十分诧异”

>甚至是任意类的任意组合(composite)上!
你读了modercn C++ design吧?policy based design确实很好用
可惜不能跟Qt的signal and slot机制配合,遗憾

>于是现在改成了functional programming+template metaprogramming+少量OOP。
我正在研读hanskell,因为这门语言可以帮助我学习functional programming的编程思想
加入lambda让STL的实用度大大提高,我终于不必为了小小的操作制造一堆functor了
Star-light 2012-10-04
  • 打赏
  • 举报
回复
C++编程风格多真是让人爱恨交加,我三年换了5种编程风格,基本没稳定过,但是过程中收获颇丰。

1 一开始是C with Object,然后觉得C不好组织程序逻辑结构,也不安全。
2 于是改成了纯OOP,然后发现要写得类太多了!重复代码也太多,码boilerplate码到死
3 于是改成了OOP+generic,重复代码少了,很多代码只写一遍。但是类还是太多,并需要一些范类的算法
4 于是改成了OOP+template metaprogramming。模板元编程真的很强大,写出来的算法可以作用于任意类,甚至是任意类的任意组合(composite)上!少写了不知道多少代码。然后就发现有了模板元编程,oop显得特别鸡肋,做出的框架不灵活,副作用难以预计,内部状态太多不易于理解和使用。

这时C++11问世了,大幅加强了functional programming(auto, delctype, lambda)

5 于是现在改成了functional programming+template metaprogramming+少量OOP。
类基本就是标准容器的排列组合,用OOP封装一些简单操作。
范类的算法用metaprogramming(比如序列化),静态算法generic(比如排序)。
静态框架用template,动态框架用template+std::function(取代虚函数)。
编译时可决定的多态用模板增强switch(boost::variant),不可决定运行时多态才用继承+虚函数。
用function object限制副作用和配置运行状态。

C++的很多写法真的很有意思
飞天御剑流 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
为何有不少人会认为C++“只是一种面向对象的语言”呢?
其实C++是各种抽象机制的综合体,OOP只是他支援的其中一种paradigm

这是C++之父的演讲,pdf
http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf

影片
http://channel9.msdn.com/Events/Going……
[/Quote]
老兄,你过于认真了,你把有限的生命浪费在一个根本不值得你花费时间的人身上。

zhao4zhong1这个人是个C++盲(其实C也好不到哪里去),对于一个C++盲所写的“C++只是一种面向对象的语言”没必要如此认真去对待。
dataxdata 2012-10-03
  • 打赏
  • 举报
回复
这是C++的好处,也是C++的难处
蛋的猥琐人生 2012-10-03
  • 打赏
  • 举报
回复
我个人感觉C++蛮强大的 挺喜欢的 虽然写程序代码有点多 ,但是什么都能写
wzb56 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

C++大庞杂既是好事也是坏事,他让C++成为一种全能语言,也让C++的用户分裂为几大流派

C风格的C++,基于对象的C++,面向对象的C++,泛型的C++,各自的代码都像一种不同的语言

100个人写C++会是100种风格,而且相互间很难兼容,因为许多思想都是对立的,这让C++的团队开发增添了许多变数和软件设计、项目管理上的难度,可以说C++是团队配合难度最高的语言之一
[/Quote]


强烈赞同。一个面向对象;一是泛型编程;
fongren 2012-10-03
  • 打赏
  • 举报
回复
c++是很强大的语言。虽然,写出来的程序代码很多。
加载更多回复(6)

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧