没有合适的资源?快使用搜索试试~ 我知道了~
首页《Microsoft_Visual_Studio_C++_2010入门经典》完整版
《Microsoft_Visual_Studio_C++_2010入门经典》完整版

《Microsoft_Visual_Studio_C++_2010入门经典》完整版 直观学习Microsoft Visual Studio 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++学的是什么?666666
学 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++下
面的那些问题,每解决一个那样的问题,你自己也会进步。
第四章 VC2010 中初学者常见错误、警告和问题
这一章将帮助大家解释一些常见的错误、警告和问题,帮助大家去理解和解决一些
常见问题,并了解它的根本原因。
iostream.h 与<iostream>

下面的代码为什么在 VC2010 下面编译不过去?
#include <iostream.h>
int main()
{
cout<<"Hello World."<<endl;
return 0;
}
错误信息:fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or
directory
造成这个错误的原因在于历史原因,在过去 C++98 标准尚未订立的时候,C++的标准
输入输出流确实是定义在这个文件里面的,这是 C 风格的定义方法,随着 C++98 标准的确
定,iostream.h 已经被取消,至少在 VC2010 下面是这样的,取而代之的是我们要用
<iostream>头文件来代替,你甚至可以认为<iostream>是这样定义的:
namespacestd
{
#include "iostream.h"
}
因此我们可以简单的修改我们的 Hello World。
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello World."<<endl;
return 0;
}
iostream.h 是属于 C++的头文件,而非 C 的,因此标准订立的时候被改成了
<iostream>。而 C 的头文件 stdio.h 等依然可以继续使用,这是为了兼容 C 代码。但是它
们依然有对应的 C++版本,如<cstdio><cstdlib>等。记住,在 VC2010 上面采用 C++风格
的头文件而不是 C 风格的头文件,除非你是在用 C。
warning C4996
这是一个警告,请看下面的代码:

#include <iostream>
using namespace std;
int main()
{
char sz[128] = {0};
strcpy( sz, "Hello World!" );
cout<<sz<<endl;
return 0;
}
上面的 strcpy 会产生这个警告:
warning C4996: 'strcpy': This function or variable may be unsafe. Consider using
strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See
online help for details.
这是因为 VC 从 2005 版本开始,微软引入了一系列的安全加强的函数来增强 CRT(C
运行时),这里对应的是 strcpy_s。_s 意为 safe 的意思,同样的道理,strcat 也是同样。
因此要解决这个问题,我们可以用 strcpy_s 来替换 strcpy,但是注意 strcpy_s 并非所有编
译器都提供,因此如果要跨编译器,请采用错误信息中所提示的方式,定义
_CRT_SECURE_NO_WARNINGS 宏来掩耳盗铃吧。另外注意并非所有的加强函数都是
在屁股后面加_s,比如 stricmp 这个字符串比较函数的增强版名字是_stricmp。下面,用
strcpy_s 来更改程序:
int main()
{
char sz[128] = {0};
strcpy_s( sz, "Hello World!" );
cout<<sz<<endl;
char* pSz2 = new char[128];
strcpy_s( pSz2, 128, "hello");
cout<< pSz2 <<endl;
delete pSz2;
return 0;
}
注意,strcpy_s 有两个版本,一个可以帮助我们自动推断缓冲区的大小,而另外一个
不能帮助我们推断,因此在编译器不能推断缓冲区大小的时候,我们需要自己指定缓冲区
的大小,如上面的程序所演示的那样,关于增强版的函数请参考我写的《深入学习 C++
String2.1 版》。
剩余44页未读,继续阅读











安全验证
文档复制为VIP权益,开通VIP直接复制

评论11