关于C++的一些东西

如何学习c++及c++用途

声明:本文并非原创,由于收藏的时间比较久了,具体网址我记不清了,还请作者见谅!

很多人把学习C++语言当成学习VC了,我曾经就走过这样的弯路。当学了很长时间的VC后还是得回过头来学习C++语言本身。

那么学习C++从何处入手?

C++语言相对于C语言来说引入了两个大的新东西,一个就是面向对象(具体来将就是类),另外就是模板技术(模板编程或者叫泛型编程是进来非常流行的技术,在C#中虽然还没有对泛型编程的支持,但是相信在将来也一定会加入这一功能),模板是C++中比较复杂的部分,但是作为一个真正的C++程序员,这部分很重要。尤其是对C++标准程序库的掌握尤为重要。刚开始的时候千万不要直扑VC中的各种向导和设计器。因为依赖开发环境生成的很多代码会把我们搞糊涂,也不利于我们学习C++语言本身。我的建议就是生成一个空的控制台工程,然后自己向里面添加文件。如下就是一个简单的控制台程序:

//robindy/list.cpp
#include  <iostream>
#include  <list>
using namespace std;
int main()
{
list<char> coll;
for(char c = 'a'; c <= 'z'; ++c)
{
coll.push_back(c);
    }
    list::const_iterator pos;
    for(pos = coll.begin();pos != coll.end(); ++pos)
    {
        cout << *pos<< ' ';
    }
    cout << endl;
    return 0;
}


对using namespace std;的解释:

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:

1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:

std::cout << std::hex << 3.4 << std::endl;

2、使用using关键字。

    using std::cout;

    using std::endl;

以上程序可以写成  cout << std::hex<<  3.4 << endl;

3、最方便的就是使用using namespace

   std;这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:

   cout << hex << 3.4 <<endl;

这段程序用到了标准模板库,在屏幕上打印字符a~z,其中main函数的标记式只有两种是被C++标准委员会接受的,只有以下两种写法是符合C++标准的,是可移植的。即:

int main()

{

}

int main(intargc, char* argv[])

{

}

C++在main()的末尾定义了一个隐式的return 0; 但是在VC中必须显式的写出return语句。在BCB中可以不写return而编译通过。

这段程序中用到了STL中的容器:链表。先是向链表中插入26个字母,然后从遍历链表,输出字符。我不建议初学者一开始就从模板库入手,但是我建议应该逐渐地有意识地学习模板库。如我们应该熟悉cout和cin的用法(位于iostream),而减少使用老式的C函数库中printf和scanf等。从控制台入手的好处就是避免我们理解VC中向导等工具生成的其他代码,整个程序的流程很清楚。新手学习VC的一大难点就是搞不清楚整个程序的流程(从那条语句开始执行,然后从那条语句退出。MFC做了太多封装,掩盖了事实的真相,^_^)。通过控制台我们可以很快地学习C++语言中的很多新特性。如类的封装、继承和多态等。通过这个时期的学习,要能够掌握三个东西: C++关键字、语法(重点是和面向对象有关的,以及模板)、C++标准程序库(知道怎么使用即可,要彻底掌握需要很多时间和精力)。至于与界面有关的东东(MFC中很大一部分是与界面相关的类,所以我认为MFC很臃肿而无聊!回头看过以前用MFC写的程序,有一种“垃圾”的感觉。)

自己做个测试: 写一个控制台程序,在其中体现出类的继承,函数重载,动态多态(通过虚函数实现),数据封装,C++标准库的运用。如果你能够轻松搞定,恭喜你,你已经通过C++语言关了。不过C++实在是一个复杂的东东,其中有各种千奇百怪的语法现象,如果没有三、五年的功力,千万不要说自己懂C++。^_^。

推荐书籍《Thinking in C++》(有精力的话,可以直接读原版) 《Essential C++》

本来我计划继续说说如何来进入C++世界的,但是琢磨了一下,觉得还是要先解决一个问题:为什么要学习C++?我觉得在软件开发这个行当了里除了为了生计外,学习新东西都是应该以兴趣为导向的。所以撇开我个人对C++的偏爱,我想为你树立起学习C++的信心和兴趣。当初我对自己学习C++的第一个忠告就是:不能半途而废!起初是兴趣驱动,后来则是生计所需,最后还是回归到了兴趣。毕竟我从中得到了乐趣,这就足够了。在学一个新东西前,解决动机问题很重要。就如同杀人一样,如果只是突然兴起,那么等尝试了以后,是没有成就感的。革命先烈们为我们作出了很好的榜样,就算我们在学习C++的道路上遇到了太多困惑和痛苦,但是我们毕竟为自己的信念做了努力,我们知道自己在做什么,知道自己在追求什么。

C++适合做什么样的开发?

C++是一门广泛用于工业软件研发的大型语言。具有很高的复杂性和解决问题的能力。C++不仅在开发上极具价值,同时在学术界也就有很高的价值。有关C++的文章应该可以用浩如烟海来形容了吧。C++的世界级经典书籍也是数不胜数。然而,目前开发语言是如此地繁荣,就连微软也在推出了新的开发语言C#。一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,前段时间看了据说是微软操作系统源代码的东东,其中很多还是C语言。而在高阶程序设计领域,Java和C#正在不断蚕食着C++的地盘。也许Java和C#的狂潮终将迫使C++回归本位— 回到它有着根本性优势的开发领域:低级系统程序设计、高级大规模高性能应用设计、嵌入式程序设计、通用程序设计以及数值科学计算等。果真如此,我认为这未尝不是一件好事。电力系统软件所要求的高性能和大规模数值计算正是C++所擅长的。就我所接触的南瑞和鲁能,很多涉及到电力系统计算的软件如PAS等,都是用C++来开发的。在电力系统软件开发这块阵地,C++大有用武之地。C++吸引如此之多的智力投入,以至于这个领域的优秀作品,包括重量级的软件产品、程序库以及书籍等,数不胜数。在C++之父Bjarne Stroustrup的个人主页上,有一页列出了一些(全部或大部分)使用C++编写的系统、应用程序和库。

下面是一些例子(摘自荣耀网站):

n  Adobe Systems:所有主要应用程序都使用C++开发而成,比如Photoshop & ImageReady、Illustrator和Acrobat等。

n  Maya:知道“蜘蛛人”、“指环王”的电脑特技是使用什么软件做出来的吗?没错,就是Maya。

n  Amazon.com:使用C++开发大型电子商务软件。

n  Apple:部分重要“零件”采用C++编写而成。

n  AT&T:美国最大的电讯技术提供商,主要产品采用C++开发。

n  Google:Web搜索引擎采用C++编写。

n  IBM:OS/400。

n  Microsoft:以下产品主要采用C++(Visual C++)编写:

u  Windows XP Windows NT:NT4、2000 Windows 9x:95、98、Me Microsoft

u  Office:Word、Excel、Access、PowerPoint、OutlookInternet Explorer,包括Outlook Express

u  Visual Studio:Visual C++、Visual Basic、Visual FoxPro.NET Framework类库采用C #编写,但C#编译器自身则使用C++编写而成。Exchange SQL Server FrontPage Project

n  所有游戏......

n  KDE:K Desktop Environment(Linux)。

n  Symbian OS:最流行的蜂窝电话OS之一。

很多新手特别容易会对自己所学习的东东产生疑惑、迷茫。觉得自己学这个东西,花了这么多时间有没有用,会不会过时?这种思想很普遍。在一些论坛上经常会看到一些各语言的优劣比较,知道自己所学语言的优劣也好,但是如果一味停留在这个层面就没有用了。任何语言都只是工具而已。重要的是使用工具的人!就我个人的经验来讲,真正处于业界搞开发的人都愿意使用成熟的、为自己所熟知的技术来完成工作。而新手都喜欢用一些比较新的技术来做开发,而且喜欢追求新奇(从界面很容易看出来,花花绿绿的界面多半出自新手)。其实,安于用一些效率可能低下、扩展性和维护性差的方法来解决问题并不是开发人员的错。他们只是在完成工作而已。但是作为一个真正有上进心的开发人员,我们应该使用更优雅和高效的编程技术,这才是我们逐渐变成编程“大牛”的好习惯。老是停留在原地,很容易被淘汰的。在软件开发这个行当,尤其如此。无论是对学生,还是一线开发人员,我觉得都不应该产生“书读够了”的感叹!我有时候喜欢将以前看过的书翻出来再看,每次总能体会到一些新东西。有关C++语言的书籍更是如此,而且我觉得我所起的题目不是很好。为什么?因为我觉得学习语言还只是新手跨入软件开发“地狱”的第一步,单单学习语言本身是远远不够的,还要学习相关的程序库(C++当然首选是先学习C++标准程序库)、相关的平台技术(如.NET),说得更远一点,还要锻炼对目标问题的分析、归纳能力等等。工作之前,技术路线自己作主,工作之后,绝大多数程序员将被公司技术路线左右。所以,趁现在还有时间,可以学一些自己感兴趣的。如果想搞软件开发,特别是电力系统软件的开发,学好C++不会令我们失望。当我们进入C++的前门,然后经过一段黑暗之路,再从后门出来到达光明顶后,我们会体味到“一览众山小”的感觉。

推荐书籍:

《编程高手箴言》梁肇新(用过超级解霸的都应该知道吧,^_^)写的第一本书,其中有几章还是值得一读的。在这本书中,梁告诉我们,学东西要耐心,要耐得住“寂寞”,走自己的路,让别人去“说”吧!

最近比较忙,原来打算紧扣主题讲讲一些具体的C++语言的细节的,但还是抽不出大段的时间了。所以,现在只能再漫谈一些关于C++的故事了。

C++源于C语言,还记得很久以前学习C语言的时光(那是一段快乐而充实的时光),可是现在学习C++,并不是在C的基础上加上了类而已,如果这样认为,我们是耍不好C++的。因此,C++绝不是C的升级或扩充,我们应该把C++当作一门新语言来学习(C++之父Bjarne Stroustrup语)。

写程序首先希望是程序能正确执行,其次是效率能够被接受,再次就是易于维护。C++是一个难学易用的语言。C++提供了太多可选择的东西,而且使用使用C++来写程序可以有四种思考模式:基于过程、基于对象、面向对象和泛型。我们使用一种语言来写程序,并不意味着就是使用语言本身,换句话说,我们更多的时候是使用程序库在写程序。比如 MFC、STL、ATL、VCL等等。其中要使用C++来写出结构优美、性能卓越、代码简洁、易于维护的代码,首推C++标准程序库。STL对效率做了严格的要求,而且使用STL写出来的程序简洁美观(前段时间我特意贴了一个要求对若干整数进行排序的帖子,其实目的就是用来展示STL的简洁优雅)。一旦习惯使用泛型思维来考虑问题,我们能够充分体会到模板带来的美!对于数值计算来说,C++标准程序库可以充分满足现代化服务和商业计算对数据、信息的即时回应的要求。

我觉得学好一门语言最重要的就是实践。也就是多“写”!“工程经验之积累”对已具有一段开发时间的程序员而言,非常重要!只有在不断的积累中,我们才能渐渐体会到C++语言中的一些背后的东西。对于这点,没有大量程序代码写作经验的菜鸟,也可以借助《Effective C++》先攒一些经验值。《EffectiveC++》是一本好书!。Meyers的书绝对值得一读,Meyers可以说当今C++社群中数一数二的技术专家。

发布了33 篇原创文章 · 获赞 41 · 访问量 25万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章