西西河

主题:【原创】一分钟了解C++ 的类 -- 橄榄枝

共:💬24 🌺13 新:
全看树展主题 · 分页首页 上页
/ 2
下页 末页
家园 【原创】一分钟了解C++ 的类

在一次朋友的聚会中,谈到C++的类(Class)。我说一分钟就能讲清楚。现在知道是在说大话了,了解还是有可能。怎么说呢?在学会之前,也曾看过,但怎么都看不明白。就象面对大山一样,可等到明白后发现很容易。

让我们来到山脚。在没有类之前,计算机程序都是在处理各种数据,如数组(Array)装载纯一的同一类的数据;结构(Structure)可以装载不同的数据类型,如整数和字符。

就像一个箱子,里面装了不同的货物。而程序就是操作这些数据的机器或工具。如汽车,吊车,铲车,叉车等等。而后来人们给这个箱子装上了汽车的轮子,装上了吊车的吊臂,甚至装上了加工设备来加工箱子里的东西。

再发展就出现了标准的箱子,即各种集装箱。还有标准的地址用来寻找到集装箱等,这就是标准模板类(Standard Template Library, STL)的出现。还有标准的吊车,装卸工具的出现,即generic function等。

人们给结构(Stucture)即数据本身加上机械工具(Function)后,另起了一个名字就类(Class)。其实现在的结构和类是一样的。但人们用C++用的是类,而只用结构原来的功能。有了类以后,继承,子类能功能就自然衍生出来了。

点看全图
外链图片需谨慎,可能会被源头改

其实到具体如何用还有有一定距离。这一分钟是讲不清楚的。推荐一本书

按照上面的例子改一改,就很容易上手了。书的名字是《标准C++宝典》英文是 Standard C++ bible, 由Al Stevens和Clayton Walnum合著。

家园 当初学java的时候手里有一本java宝典

看见“宝典”俩字就想乐,怎么看怎么觉得有“葵花”的味道。当时各种Bible还不少,有些用处。

家园 Thinking in C++也不错。

不过是属于大全之类的参考书,学的话比较繁杂。

从头学习c++的话,清华还是什么谭浩强还是谁的c++什么什么的对语法就足够了。C++标准库需要在了解了c++的语法后另看。

至于面向对象的思想和方法推荐那本《design pattern》,不过这本书类似参考书。可以先看explained design pattern。

structure和class两个key word的区别,我记得在g++处理的时候,structure实际上就是一个默认全部public的class,也就是说支持封装函数,能不能继承和多态我记不清了。而c中的structure是不支持封装函数的。

家园 没有逻辑上的抽象咋上层次呢?

C++ 这两个加号可不是百来的~~~

家园 你说得对,struct和class的区别只在于

成员函数及变量的缺省属性。

其他没有什么区别。

家园 modern c++ design也是本好书

看完后对c++ template的认识会升华到一个很高的层次;-)

家园 C++ 的STL 使其极为powerful。
家园 外行来说说

没用过c++编程,感觉从基础c到c++还是有些难度的。主要是从顺序编程到面向对象,思维有点转变困难。但是用origin的时候,赶鸭子上架,用过里边的c语言的类,最大的感触是:眼花缭乱。想实现一个功能,找不到需要的类,看软件带的程序使用的一些类在帮助文档里没有,即使有,从一大推类里边找自己想要的,也非常费劲。不知道程序员们编程,是不是也要这么费劲,还是有妙招。

家园 昨天给同事做了个modern c++ design的培训

我们现在做java开发,介绍一下gp编程,让他们换换脑子,呵呵。

家园 c++的书,还是TCLP王道

02年的时候,看到这本<The C++ Programming Language> 顿时精为天书,研读终年,走到哪儿都带着这本书。跟着我从武汉到南京再到成都,最后回到杭州。

虽然这几年改行做java了,可是有空时候,还是拿出来翻翻,换换脑子。

家园 C++的优点就是极为灵活

习惯了procedure programming对于什么都用对象来考虑是会不习惯的。

用过里边的c语言的类,

c没有类的概念

最大的感触是:眼花缭乱。想实现一个功能,找不到需要的类

你是没找到能拿来就直接用的类,说明你对整个库还不熟。

看软件带的程序使用的一些类在帮助文档里没有,即使有,从一大推类里边找自己想要的,也非常费劲。

软件本身肯定也用了自己库,不过人家有内部关系,有些类不一定公开。多看提供的例子来了解可用的类和函数

家园 我要能熟到这份上,就可以改行去做程序员了

去origin 应聘也行,哈哈。

当然origin里的c是c++,所以有类,不过名字叫originC,不叫originC++。

不过我一直认为,有C++编程基础的人来用origin会更得心应手。

不过借此我能稍微明白了类这一个概念,也算是有所收益了。

普通编程人员对哪些库需要很熟呢?其来源是帮助文档?

家园 这个不需要那么熟的

基本上这些软件都提供丰富的例子来教你,写个小程序抄抄改改就行了,上手应该不难的。

普通编程人员对哪些库需要很熟呢?其来源是帮助文档?

看你做什么方面的事情了,一般来讲,任何大项目都会有相应的开发人员写的文档,先读编文档是比较好的习惯,有问题的话论坛和邮件列表则是最好的助手,我个人更偏好mailing list。当然有些项目缺乏丰富的示例,这个时候只能考虑和开发人员联系,他们一定清楚该怎么办。

家园 非正版用户

不好意思麻烦开发人员老人家啊,哈哈

俺是应用软件的,只是自己写点代码扩展一下功能而已。

做开发的话,应该是很欢迎用户和自己交流的吧。打算以后有空了,学学编程,自己搞个小软件玩玩。

家园 严重同意

  只是个人觉得这本不适合做C++的启蒙教程。做为入门后的书的确是不二之选。

  其实大部分C++都有一个通病,就是把面相对象技术作为书的一大部分。其实完全可以把两者分开,只是面相对象是C++与C的主要区别,通常都免不了。The C++ programming language好的地方之一就是它集中精力讲C++语言本身,而非面相对象思想。不象Thinking in C++和Thinking in Java,两本的前半部分就基本没有什么区别嘛,真讲语言部分又太过泛泛。

全看树展主题 · 分页首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河