西西河

主题:【原创】一分钟了解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合著。

    • 家园 c与c++区别在思考方式

      c那个时代主流设计思想是结构化,面向过程。程序设计的思路是把被操纵的对象的属性放在一起,形成数据结构。如苹果的形状颜色等等。对对象的操作归纳为函数。

      c++时代的设计思想是把被操纵的对象的属性和行为都放在一起,形成一个类(class),对象是"活"的。如苹果除了包括形状颜色等属性之外,还包括成长,采摘等等对苹果的操作。

      二者关键的区别在于对于现实世界对象的抽象方式。面向过程的方式的缺陷在于细节太多,抽象不够,比如要描述国光和红富士可能就需要2个不相关的数据结构,而如果用面向对象的方式,则可以用基类苹果以及2个派生类国光和红富士去平衡抽象与具体细节之间的关系。虽然代码不见得少,但是可以提供一个更加易于理解和操作的概念(苹果)。

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

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

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

      • 家园 能给个完全的列表吗

        包括出版商,作者名等等,我好去当当找一下。

        兄弟我虽然年级一把了,可还要靠C++混饭吃。好书难觅啊。

        多谢了先。

        • 家园 找了一下

          书名:《The C++ programming Language》

          作者:Bjarne Stroustrup

          译者: 裘宗燕

          机械工业出版社出版

          我02年买的时候是special edition,现在可能有新的版本了。

          作者Bjarne Stroustrup是C++的创始人,对C++的把握无人能出其右。不过这本书相对较难,入门不太合适。

          可以先看一下effectiive c++和thing in c++,在http://www.china-pub.com上都有这些书的解释。

      • 家园 严重同意

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

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

    • 家园 外行来说说

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

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

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

        用过里边的c语言的类,

        c没有类的概念

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

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

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

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

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

          去origin 应聘也行,哈哈。

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

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

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

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

          • 家园 这个不需要那么熟的

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

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

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

            • 家园 非正版用户

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

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

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

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


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

Copyright © cchere 西西河