《C++对象模型》读后感——前言

C++加了什么?

  C++在语法上相对于 C,最重要的是增加了 class 的定义(其它的还有 template 等特性)。C++和 C 语言在编译之后,都是运行在同一套环境上的二进制代码,所以从某个角度来说,C++和 C 语言并无区别,而新增加的特性只是一些语法糖。确实,C++的很多新特性都可以转为 C 语言来实现,但是程序员必须要写大量重复的代码来实现这些功能。比如一个 class,转为 C,就是一个结构体,加一堆处理这个结构体的函数(第一个参数为这个结构体的指针);继承就是在结构体中包含父类的结构体(类似于复合);虚函数就是在结构体中加一个 vfptr(虚函数指针),程序员再自己定义一个函数指针的数组,并且在创建结构体的时候,初始化vfptr 指向正确的数组,调用时自己手动取得虚函数指针;而 template 就更简单了,写一大堆相同的代码,取个不同的名字(C 语言不支持函数重载); EH(error-handling)就比较复杂了,但是它是需要操作系统一定上的支持(Windows 中就可以在 C 中实现 EH)。而 C++此时带来的便利就是,在 C 语言基础上,增加了一些新语法,而编译器通过这些语法来帮你完成大量重复的工作。

  除了在语法上的支持,我觉得 C++更重要的是增加的是面向对象的概念。虽然说 C 语言是面向过程的语言,但是谁又规定了你不能用面向对象的思想来写 C 语言呢。只是在 C 语言中使用面向对象太枯燥太难维护了,而 C++则要轻松的多。就好像给你一块主板和一台电脑来写程序。你拿着主板,还要想要配个多大的内存,整个什么机箱,最后在想怎么写程序;而如果你拿着的是一台电脑,你一开始就可以想着怎么来设计这个程序。但是 C++不好的一点就是兼容 C 语言,导致有很多人号称精通 C++,却用它写着 C 语言的程序。Java 就在语法上强制规定,所以东西都必须来自 class,虽然也不能避免程序员写出面向过程的代码,但是在一定程度上限制了面向过程。就好比用 Java 写面向过程的代码,要多费功夫;而用 C++,只要会 C,就能写面向过程的代码,而要写面向对象的,则要学习一些新的东西。相比而言,谁会喜欢多费功夫呢。(程序员都是聪明人,不然也不会写程序去完成大量重复复杂的人工操作)。

  很多程序员都在潜意识里认为 C++比 C 语言效率低,原因是编译器偷偷的在背后做了很多工作。这个观点在大部分时候是正确的,但是它在哪儿做了工作,做了哪些工作,为什么要做这些工作呢?如果不了解这些东西,那么这个观点你只是从其他人那儿听来的吧。在写 C 语言的时候,我们的脑子里都会有一个状态图,实时的显示着这行代码该怎么执行,会有什么效果。但是到了 C++里面,这个图就糊了,有时候看着没问题的代码,它怎么就错了呢。

《C++对象模型》读后感——前言,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。