《Visual C++ 2010入门教程》系列三:关于C++的一些问题
《Visual C++ 2010入门教程》系列三:关于C++的一些问题
这一回我自己都不知道应该写点什么好,或许今天的篇幅会比往常短很多。我说过,这不是C++的教程,因为我还没有那个能力来教大家C++,我能做的,是分享一些学习的经验,以及教新手如何使用VC2010这个工具去练习和实践其它C++教材上面的程序,如《C++Primer》等。
今天说的是我学习和使用C++这些年来对C++的一些理解,这样的日志其实是最难写的,因为众口难调,为什么这么说呢?同样的一段音乐不同的人去倾听都会有不同的感受,不同的心境去听也会有不同的感觉。记得当年我在听雅尼的《If I could tell you》听到的是无尽的伤感和无奈,而我的朋友却怎么也听不出来,呵,你去听听之后会有什么感觉?
好,回归正题吧。
什么是编程
下面这段话我是从百度百科“编程”词条复制过来的,不敢掠人之美:
编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。
这段话说的比较明白,我们如果想让计算机按照我们想要的方式工作,那么我们必须给它命令,有的常见的任务已经由操作系统帮助我们提供了,操作系统将一些简单的指令封装成一个简单的操作,使得我们的操作更容易更简单,然而操作系统提供的操作始终是有限的,如果要扩展计算机的软件系统,就需要编程了。
什么是编程语言
如上所说,编程语言就是人类与计算机交流的桥梁。首先编程语言必须是计算机可以理解的或者是可以间接转换成计算机可以理解的指令的东西。打个比方,如果你在一台普通电脑面前站着,大叫道:“电脑,给哥把C盘根目录下面的A文件拷贝到D盘根目录下面去”。我猜想你就算叫上一天也没用,因为普通的电脑无法识别你的指令,这就算是对“机”弹琴吧。
什么是编译器
如上所说,编程语言是计算机可以直接理解的如机器码或者可以间接转换成计算机可以理解的指令的东西。那么C++就属于后者,那么是什么把C++翻译成计算机可以识别的指令的呢?这就是编译器。
什么是C++
我不想说C++的历史了,我想说,它是一门编程语言,它可以通过编译器的翻译成为计算机可以识别的指令。比如我们常见的C++代码:
int a = 3 + 1;
cout<< a << endl;
这翻译成机器码或者计算机可以理解的指令大概可以是这样的:
现在请为我准备一个变量a,请用3+1的和去初始化它,然后请加它的值输出到控制台上并追加上一个空格。
关于C++的更多东西,建议大家去看专门的C++教材或者维基百科、百度百科等相关词条。
学C++学的是什么?
学C++学的是什么?可以说C++是很复杂的,因为要实现一些在其它语言中很简单的任务,在C++中通常都需要更多的代码和时间,以创建一个窗口为例,其它语言由于有内置的支持,甚至当我们创建一个HelloWorld程序时候就已经创建了一个窗口。而在纯粹的C++环境中,这是做不到的,因为C++并没有提供GUI的内置支持,如果要用C++创建窗口,我们需要使用到系统API或者使用封装了这些API的一些库,前者如Win32程序设计后者如MFC、wxWidgets。
但是这些并不能代表C++不好,反而C++是很强大的,我们学习C++学得不仅仅是C++的语法,因为仅仅懂得C++的一些语法又能怎么样呢?演示算法么?其实我认为学习C++的初期当然是熟悉C++的语法,中期当然是学习STL等库、系统API以及熟悉C++的面向对象的思想和一般的设计方法;后期是伴随着你C++生涯的一生的,因为它没有终点的,这时候除了要继续加深对C++的理解之外,还需要去学习各种各样的基于C++的库,因为你需要在这些库的帮助下使用C++去实现更具体的东西,比如一些GUI库如QT、wxWidgets,一些游戏引擎如Ogre、Unreal、Bigworld等,一些网络库如ASIO、RakNet、ACE等。这些库大多有一个特点就是他们是基于C++,封装了底层的API使得我们可以不必每次多去使用繁杂的API来实现我们想要的功能。当然,你也可以用C++去封装这些API,让自己成为一个库作者,方便他人。
学习C++,学习C和C++的库,学习其它各领域的C++库,好好的使用这些库或者自己写一些库,其它一些你能想到的与C++相关的事情。
怎样才能用C++来做事情
通常我认为如果只使用最基本的C++以及其内置库来做事情,那么能做的事情始终是有局限的,因为C++的库毕竟是有限的,我们能用它来写一些核心代码,因为这部分代码通常都不需要与具体的应用关联起来。使用C++以及C++继承的C库我们能做一些简单的文件操作,因此还可以写一些与此相关的处理程序。其实不仅仅是C++,比如C#,加入你在应用中不引入.net Framework下面提供的大量的其它的类(指除了最基本的如System.Console等之外的类),你又能用C#做什么呢?我们在做C#的时候通常要引入一些新的类,引用一些新的命名空间,其实C++也是这样的,要做更具体的事情,就需要除C++本身之外的更多东西才行。
因此,要用C++来做事情,除了C++的基本语法之外,还需要学习一些其它一些内容如Windows API、MFC、DirectX 3D API等。
C++、C#、Java到底谁好?
对于这个问题,我想说的是:语言无贵贱,技术有高低。其实无论什么语言,它们在这里都是编程语言,也许它们看起来不一样,它们用起来也不一样,它们的“翻译”编译器不一样,但是它们的本质作用就是要用它们自己的方式将我们人类的解决问题的方法、思路和流程告知给计算机。这也就是为什么C++、C#、Java可以相互交互的原因。
每个语言就像江湖上的各门派的武功一样,其实真的没有高下之分,只有个人的修为,少林武功就一定强于武当么?《碧血剑》中袁承志不也用普普通通的五行拳击溃了荣彩么?只是不同的武功在不同的条件下表现不同,他们各自占据了自己有利的地位罢了,以杨家枪法为例,或许二人比武它不厉害,但是征战沙场估计是再适合不过了。
因此不要再纠结什么语言好,什么语言流行了,选择一个自己喜欢的方向,然后调查好那个方向最常用最适合的语言,然后集中注意力坚持的去学习它,这就好了。
今天的内容就是这些,希望对大家有帮助。请大家务必好好学习C++教材,并使用VC2010好好演练,最好能够举一反三自己创造问题自己解决!多看看百度知道C/C++下面的那些问题,每解决一个那样的问题,你自己也会进步。
《Visual C++ 2010入门教程》系列三:关于C++的一些问题的更多相关文章
- 《Visual C++ 2010入门教程》系列一:关于Visual Studio、VC和C++的那些事
原文:http://www.cnblogs.com/Mrt-02/archive/2011/07/24/2115606.html 作者:董波 日期:2010.6.15 写在前面 在我还在上学的时候,我 ...
- 《Visual C++ 2010入门教程》系列六:VC2010常见调试技术
<Visual C++ 2010入门教程>系列六:VC2010常见调试技术 犹豫了好久,最终还是决定开始这一章,因为我不清楚到底有没有必要写这样的一章,是应该在这里说明一些简单的调试方 ...
- 《Visual C++ 2010入门教程》系列四:VC2010中初学者常见错误、警告和问题
<Visual C++ 2010入门教程>系列四:VC2010中初学者常见错误.警告和问题 这一章将帮助大家解释一些常见的错误.警告和问题,帮助大家去理解和解决一些常见问题,并了解它的 ...
- 《Visual C++ 2010入门教程》系列二:安装、配置和首次使用VS2010
作者:董波 日期:2010.6.15 写在前面 在我还在上学的时候,我选择了C++,最初我用VC6作为我的IDE,我看过很多本C++的教材,有的适合我,有的不适合我,其中有一本叫<Visual ...
- Visual C++ 2010入门教程
<Visual C++ 2010入门教程>系列一:关于Visual Studio.VC和C++的那些事 作者:董波 日期:2010.6.14 写在前面 在我还在上学的时候,我选择了C+ ...
- WPF入门教程系列三——Application介绍(续)
接上文WPF入门教程系列二——Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...
- 《Visual C++ 2010入门教程》系列五:合理组织项目、使用外部工具让工作更有效
原文:http://www.cnblogs.com/Mrt-02/archive/2011/07/24/2115631.html 这一章跟大家分享一些与c++项目管理.VAX.SVN.VS快捷键等方面 ...
- WCF入门教程系列三
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- WPF入门教程系列三
WPF之Binding的使用(一) 一. 前言 初学WPF经常被Binding搞得苦不堪言,Binding的重用性就不做介绍了,在WPF应用程序开发中Binding是一个非常重要的部分.WPF也是近 ...
随机推荐
- oo的一些概念
http://docs.kissyui.com/5.0/guides/base/oo.html JavaScript 语言自成体系,自有一套代码重用的模式,这些常见的代码重用模式可以在<Java ...
- HDU-1041-Computer Transformation,大数递推,水过~~
Computer Transformatio ...
- 复(学)习化学时突然的一个 idea
期中考试成功探底...但是某些化学问题还是很有信息学价值的... n 烷同分异构体计数. 这个题 fanhq666 出过,就是一个 dp. 设 f[i] 表示含有 i 个节点的无标号不同构的度数限制为 ...
- HDU1686 计算模式串匹配的次数
题目大意: 输入一个T,表示有T组测试数据: 每组测试数据包括一个字符串W,T,T长度大于W小于1000000,w长度小于10000,计算W匹配到T中成功的次数: 这题很明显要用KMP算法,不然很容易 ...
- Vim enhance part1
NO1 .认识.命令 例 删除man.config中第1到30行的注释 1.光标移到#上,按下x删除 2.按下j将光标移到第二行#上,之后按下. 3.可以看到第2行的#也被删除了因为.就是重复上次命令 ...
- BZOJ1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘
一傻逼题调了两天.. n<=30 * m<=30的地图,0表示可以放平台,1表示本来有平台,2表示不能走,3起点4终点,走路方式为象棋的日字,求:从起点走到终点,至少要放多少平台,以及放平 ...
- msp430入门编程50
msp430中项目编程套路 msp430入门编程 msp430入门学习
- Java加载配置文件类
/** * 对应配置文件类, */ package com.up72.parkSys.ThirdParty; import java.io.IOException;import java.io.In ...
- iterm2退出时保存会话状态,下次打开恢复
可以保存已经打开的窗口,本机进入的目录 无法保存ssh连接状态,无法保存ipython状态等 设置方法: 1.这里设置为yes,据说,反复修改一次,重启才起作用,实在有问题就试试 2.这里设置一下 3 ...
- Meteor教程
Meteor 是一个构建在 Node.js 之上的平台,用来开发实时网页程序.Meteor 程序位于数据库和用户界面之间,保持二者之间的数据同步更新. 因为 Meteor 是基于 Node.js 开发 ...