Visual C++ 2013入门经典(第7版) [Ivor Horton’s Beginning Visual C++ 2013]

Visual C++ 2013入门经典(第7版) [Ivor Horton’s Beginning Visual C++ 2013] pdf epub mobi txt 电子书 下载 2025

[美] 霍尔顿(Horton I.) 著,李周芳,江凌 译
图书标签:
  • Visual C++
  • C++
  • Visual Studio
  • 编程入门
  • Windows 编程
  • 入门经典
  • Ivor Horton
  • 第7版
  • 开发工具
  • C++教程
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 清华大学出版社
ISBN:9787302385059
版次:1
商品编码:11611761
品牌:清华大学
包装:平装
丛书名: .NET开发经典名著
外文名称:Ivor Horton’s Beginning Visual C++ 2013
开本:16开
出版时间:2015-01-01
用纸:胶版纸
页数:774

具体描述

产品特色

编辑推荐

  《Visual C++ 2012入门经典(第6版)》升级版本,第七版
  编程导师Ivor Horton经典作品,连续十五年
  作者经典作品包含:《C语言入门经典(第5版)》《 C++入门经典(第3版)》《Java 7入门经典》

Ivor Horton经典作品:

内容简介

  著名编程图书作家Ivor Horton引导学习Visual C++ 2013这本C++语言畅销书遵循Ivor Horton一贯的畅销风格。Horton非常详尽地介绍了标准C++语言和Visual C++。
  《Visual C++ 2013入门经典(第7版)》根据Visual C++ 2013进行了更新,展示了如何使用Visual C++建立实用的应用程序。阅读本书不需要任何编程经验。作者使用大量循序渐进的编程示例,引导读者掌握C++开发的全部奥秘。
  《Visual C++ 2013入门经典(第7版)》特色
  ◆ 介绍C++编程的基本概念以及Visual C++开发环境的要点
  ◆ 从简单的过程式程序开始解释C++语言,逐步过渡到类和面向对象编程
  ◆ 演示如何在各种环境下应用标准模板库(STL)
  ◆ 揭示每个Windows桌面应用程序中的基本元素
  ◆ 展示如何使用MFC建立图形用户界面以编写Windows应用程序
  ◆ 通过一个在Windows 8下执行的游戏示例,说明如何开发Windows Store应用程序

作者简介

  Ivor Horton,是世界著名计算机图书作家,独立顾问,帮助无数程序员步入编程殿堂。他曾在IBM工作多年,以优异成绩拥有数学学士学位。他的资历包括:使用大多数语言(如在多种机器上使用汇编语言和高级语言)进行编程,实时编程,设计和实现实时闭环工业控制系统。Horton拥有丰富的面向工程师和科学家的编程教学经验(教学内容包括C、C++、Fortran、PL/1、APL等)。同时,他还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。

目录

第1章 使用Visual C++编程 1
1.1 使用Visual C++学习 1
1.2 编写C++应用程序 2
1.3 学习桌面应用程序的编程 2
1.3.1 学习C++ 3
1.3.2 C++概念 3
1.3.3 控制台应用程序 4
1.3.4 Windows编程概念 4
1.4 集成开发环境简介 6
1.4.1 编辑器 6
1.4.2 编译器 6
1.4.3 链接器 6
1.4.4 库 7
1.4.5 标准C++库 7
1.4.6 Microsoft库 7
1.5 使用IDE 7
1.5.1 工具栏选项 8
1.5.2 可停靠的工具栏 9
1.5.3 文档 9
1.5.4 项目和解决方案 9
1.5.5 设置Visual C++的选项 16
1.5.6 创建和执行Windows应用程序 17
1.6 小结 19
1.7 本章主要内容 19

第2章 数据、变量和计算 21
2.1 C++程序结构 21
2.1.1 main()函数 28
2.1.2 程序语句 28
2.1.3 空白 30
2.1.4 语句块 30
2.1.5 自动生成的控制台程序 30
2.2 定义变量 32
2.2.1 命名变量 32
2.2.2 关键字 32
2.2.3 声明变量 33
2.2.4 变量的初始值 33
2.3 基本数据类型 34
2.3.1 整型变量 34
2.3.2 字符数据类型 35
2.3.3 整型修饰符 36
2.3.4 布尔类型 36
2.3.5 浮点类型 37
2.3.6 C++中的基本类型 37
2.3.7 字面值 38
2.3.8 定义类型的别名 39
2.4 基本的输入/输出操作 40
2.4.1 从键盘输入 40
2.4.2 到命令行的输出 40
2.4.3 格式化输出 41
2.4.4 转义序列 42
2.5 C++中的计算 44
2.5.1 赋值语句 44
2.5.2 算术运算 44
2.5.3 计算余数 49
2.5.4 修改变量 49
2.5.5 增量和减量运算符 50
2.5.6 计算的顺序 52
2.6 类型转换和类型强制转换 53
2.6.1 赋值语句中的类型转换 54
2.6.2 显式类型转换 54
2.6.3 老式的类型强制转换 55
2.7 auto关键字 55
2.8 类型的确定 56
2.9 按位运算符 56
2.9.1 按位AND运算符 57
2.9.2 按位OR运算符 58
2.9.3 按位XOR运算符 59
2.9.4 按位NOT运算符 60
2.9.5 移位运算符 60
2.10 lvalue和rvalue 61
2.11 了解存储时间和作用域 62
2.11.1 自动变量 62
2.11.2 决定变量声明的位置 65
2.11.3 全局变量 65
2.11.4 静态变量 68
2.12 具有特定值集的变量 68
2.12.1 旧枚举 68
2.12.2 类型安全的枚举 70
2.13 名称空间 72
2.13.1 声明名称空间 73
2.13.2 多个名称空间 74
2.14 小结 75
2.15 练习 75
2.16 本章主要内容 76

第3章 判断和循环 79
3.1 比较数据值 79
3.1.1 if语句 80
3.1.2 嵌套的if语句 81
3.1.3 嵌套的if-else语句 85
3.1.4 逻辑运算符和表达式 87
3.1.5 条件运算符 89
3.1.6 switch语句 91
3.1.7 无条件转移 94
3.2 重复执行语句块 95
3.2.1 循环的概念 95
3.2.2 for循环的变体 98
3.2.3 while循环 105
3.2.4 do-while循环 107
3.2.5 基于范围的循环 108
3.2.6 嵌套的循环 108
3.3 小结 111
3.4 练习 111
3.5 本章主要内容 111

第4章 数组、字符串和指针 113
4.1 处理多个相同类型的数据值 113
4.1.1 数组 114
4.1.2 声明数组 114
4.1.3 初始化数组 117
4.1.4 使用基于范围的for循环 118
4.1.5 多维数组 119
4.2 处理C样式的字符串 123
4.2.1 字符串输入 124
4.2.2 字符串字面量 125
4.2.3 给字符串使用基于范围的for循环 126
4.3 间接数据访问 128
4.3.1 指针的概念 128
4.3.2 声明指针 128
4.3.3 使用指针 129
4.3.4 初始化指针 130
4.3.5 指向char类型的指针 132
4.3.6 sizeof操作符 136
4.3.7 常量指针和指向常量的指针 136
4.3.8 指针和数组 138
4.4 动态内存分配 144
4.4.1 堆的别名—— 空闲存储器 144
4.4.2 new和delete操作符 145
4.4.3 为数组动态分配内存 146
4.4.4 多维数组的动态分配 148
4.5 使用引用 149
4.5.1 引用的概念 149
4.5.2 声明并初始化lvalue引用 149
4.5.3 在基于范围的for循环中
使用引用 150
4.5.4 创建rvalue引用 151
4.6 字符串的库函数 151
4.6.1 确定以空字符结尾的字符串的长度 152
4.6.2 连接以空字符结尾的字符串 152
4.6.3 复制以空字符结尾的字符串 153
4.6.4 比较以空字符结尾的字符串 154
4.6.5 搜索以空字符结尾的字符串 154
4.7 小结 156
4.8 练习 156
4.9 本章主要内容 157

第5章 程序结构(1) 159
5.1 理解函数 159
5.1.1 需要函数的原因 160
5.1.2 函数的结构 161
5.1.3 替代的函数语法 163
5.1.4 使用函数 163
5.2 给函数传递实参 166
5.2.1 按值传递机制 167
5.2.2 给函数传递指针实参 168
5.2.3 给函数传递数组 169
5.2.4 给函数传递引用实参 173
5.2.5 使用const修饰符 175
5.2.6 rvalue引用形参 176
5.2.7 main()函数的实参 178
5.2.8 接受数量不定的函数实参 179
5.3 从函数返回值 181
5.3.1 返回指针 181
5.3.2 返回引用 184
5.3.3 函数中的静态变量 186
5.4 递归函数调用 188
5.5 小结 191
5.6 练习 191
5.7 本章主要内容 192

第6章 程序结构(2) 193
6.1 函数指针 193
6.1.1 声明函数指针 194
6.1.2 函数指针作为实参 196
6.1.3 函数指针的数组 198
6.2 初始化函数形参 198
6.3 异常 200
6.3.1 抛出异常 202
6.3.2 捕获异常 202
6.3.3 重新抛出异常 204
6.3.4 MFC中的异常处理 204
6.4 处理内存分配错误 205
6.5 函数重载 206
6.5.1 函数重载的概念 207
6.5.2 引用类型和重载选择 209
6.5.3 何时重载函数 210
6.6 函数模板 210
6.7 使用decltype操作符 212
6.8 使用函数的示例 215
6.8.1 实现计算器 215
6.8.2 从字符串中删除空格 217
6.8.3 计算表达式的值 218
6.8.4 获得项值 220
6.8.5 分析数 221
6.8.6 整合程序 224
6.8.7 扩展程序 225
6.8.8 提取子字符串 227
6.8.9 运行修改过的程序 229
6.9 小结 229
6.10 练习 229
6.11 本章主要内容 230

第7章 自定义数据类型 233
7.1 C++中的结构 233
7.1.1 结构的概念 234
7.1.2 定义结构 234
7.1.3 初始化结构 234
7.1.4 访问结构的成员 235
7.1.5 伴随结构的智能感知帮助 238
7.1.6 RECT结构 239
7.1.7 使用指针处理结构 240
7.2 数据类型、对象、类和实例 241
7.2.1 类的起源 243
7.2.2 类的操作 243
7.2.3 术语 244
7.3 理解类 244
7.3.1 定义类 244
7.3.2 声明类的对象 245
7.3.3 访问类的数据成员 245
7.3.4 对象成员的初始化 247
7.3.5 初始化类成员 248
7.3.6 类的成员函数 248
7.3.7 在类的外部定义成员函数 250
7.3.8 内联函数 251
7.4 类构造函数 252
7.4.1 构造函数的概念 252
7.4.2 默认的构造函数 254
7.4.3 默认的形参值 256
7.4.4 在构造函数中使用初始化列表 258
7.4.5 声明显式的构造函数 259
7.4.6 委托构造函数 260
7.5 类的私有成员 260
7.5.1 访问私有类成员 263
7.5.2 类的友元函数 263
7.5.3 默认复制构造函数 266
7.6 this指针 267
7.7 类的const对象 269
7.7.1 类的const成员函数 270
7.7.2 类外部的成员函数定义 271
7.8 类对象的数组 271
7.9 类的静态成员 273
7.9.1 类的静态数据成员 273
7.9.2 类的静态函数成员 276
7.10 类对象的指针和引用 277
7.10.1 类对象的指针 277
7.10.2 类对象的引用 279
7.11 小结 280
7.12 练习 280
7.13 本章主要内容 281

第8章 深入理解类 283
8.1 类析构函数 283
8.1.1 析构函数的概念 284
8.1.2 默认的析构函数 284
8.1.3 析构函数与动态内存分配 286
8.2 实现复制构造函数 289
8.3 运算符重载 291
8.3.1 实现重载的运算符 291

精彩书摘

  2. #include指令—— 头文件
  在注释之后有一个#include指令:
  #include
  之所以称其为指令,是因为它命令编译器完成某项任务—— 此处是在编译之前,在此程序的源文件中插入文件iostream的内容,该文件名位于尖括号之间。iostream文件称为头文件,因为它总是插入到另一个源文件中。iostream头文件是标准C++库的一部分,它包含一些使用输入和输出语句所需的定义。如果没有在此程序中包括iostream的内容,那么不能编译这个程序,因为在这个程序中使用的输出语句依赖该文件中的一些定义。Visual C++提供了许多不同的标准头文件,它们具有各种各样的功能。在进一步学习语言工具时,将看到更多的头文件。
  由#include指令插入的文件的名称不一定写在尖括号之间。头文件名也可以写在双引号中。因此上面的代码也可以写成:
  #include "iostream"
  两者之间的唯一区别是编译器将在什么地方查找此文件。如果头文件名是用双引号引起来的,则编译器先在包含此指令的源文件所在的目录中搜索头文件。如果头文件未找到,编译器再搜索存储标准头文件的目录。
  如果文件名是用尖括号括起来的,则编译器只搜索包含标准头文件的目录。因此,想在源文件中包含标准头文件时,应该将文件名用尖括号括起来,因为这样的搜索速度更快。而要包含其他头文件,一般是自己创建的头文件,则应该将文件名用双引号引起来;否则,根本找不到。
  #include语句是几个预处理器指令中的一个,本书后面将介绍其他预处理指令。编辑器会在编辑窗口中用蓝色突出显示它们。预处理器指令是由编译的预处理阶段执行的命令,这个阶段在代码编译成目标代码之前执行,在编译源代码之前,预处理器指令通常以某种方式作用于它们。预处理器指令都以#字符开头。
  3. 名称空间和using声明
  如第1章所述,标准库是一个大型的例程集合,用于执行许多常见的任务,如处理输入和输出,以及执行基本的数学计算。由于标准库中的这些例程以及其他具有名称的事物数量巨大,因此用户使用的名称可能无意中与标准库中的名称雷同。名称空间是一种机制,它可以将无意中使用重名的风险降至最低,其方法是将一组给定的名称(如标准库中的名称)与一种姓(family name)关联起来,这种姓就是名称空间名称。
  在名称空间的代码中定义的每个名称都有一个关联的名称空间名称。标准库工具定义在std名称空间内,所以标准库中的每一项都有自己的名称,以及作为限定符的名称空间名称std。标准库中cout和endl的全名是std::cout和std::endl,第1章介绍过这些名称。将名称空间名称和实体名分隔开的两个冒号构成了称为“作用域解析运算符”的运算符,本书后面将介绍这种运算符的其他用途。在程序中使用全名会使代码看起来有点混乱,所以最好使用不由名称空间名称std限定的简化名。在前面的程序中,iostream的#include指令后面的两行代码使之得以实现:
  using std::cout;
  using std::endl;
  这些是using声明,它们告诉编译器,要在不指定名称空间名称的情况下使用名称空间std中的名称cout和endl。编译器假定,在第一个using声明之后,只要使用名称cout,就表示std::cout。名称cout表示对应于命令行的标准输出流,名称endl表示换行符,并刷新输出缓存。本章后面会详细介绍名称空间,包括如何自定义名称空间。
  2.1.1 main()函数
  上述示例中的函数main()包括将它定义为main()的函数头,以及从第一个左大括号({)到对应的右大括号(})之间的所有语句。这对括号将这个函数中的可执行语句包围起来,它们总称为函数体。
  所有函数都包括一个定义函数名称的头,然后是函数体,它由包括在大括号之间的一些程序语句组成。函数体也可以不包含任何语句,这时它不做任何事情。
  不做任何事情的函数似乎有些多余,但是在编写大程序时,一开始可以先勾画出函数中的完整程序结构,而忽略许多函数的代码,使它们有一个空的或者最小的函数体。这意味着,可以随时编译和执行包含所有函数的整个程序,并逐步给函数添加详细的代码。
  2.1.2 程序语句
  main()函数体的每个程序语句都以一个分号结束。分号表示语句的结束,而不是这一行的结束。因此,为了使代码更易于理解,可以把一个语句扩展成几行,也可以把几个语句放在同一行中。程序语句是定义程序功能的基本单元。这有点像文章中一个段落的句子,每个句子都独立地表达一个行为或想法,和这个段落中的其他句子联系和组合起来,就表达出比较全面的想法。一个语句就是计算机将要执行的一个行为的自包含定义,和其他语句组合起来, 就可以定义比较复杂的行为或计算。
  函数的行为始终由一些语句来表达,每个语句都以分号结束。看看刚才编写的示例中的语句,大致了解它是如何运行的。本章后面将讨论每种类型的语句。
  在main()函数体中,第一个语句是:
  int apples, oranges; // Declare two integer variables
  这个语句定义了两个变量apples和oranges。变量是一段已命名的计算机内存,用于存储数据,引入一个或多个变量名称的语句称为变量声明。关键字int表明apples和oranges变量将存储整数值。每当把一个变量的名称引入程序时,都要指定它将存储的数据类型,这称为变量的类型。
  接下来的这个语句声明了另一个整型变量fruit:
  int fruit; // ...then another one
  虽然可以在同一个语句中声明几个变量,如同前面的语句声明apples和oranges那样。但是,一般最好用一个语句声明一个变量,独占一行,这样就可以单独注释,以解释它们的用途。
  示例中的下一行代码是:
  apples = 5; oranges = 6; // Set initial values
  这行代码包含两个语句,每个语句都以一个分号结束。这样做的目的是说明可以把多个语句放在一行中。这不是强制的,但良好的编程习惯一般是一行只编写一个语句,使代码较容易理解。良好的编程习惯是采用使代码易于理解、且使出错的可能性降至最低的编码方法。
  这两个语句分别将数值5和6存储到变量apples和oranges中。这些语句称为赋值语句,因为它们把新值赋给变量,=是赋值运算符。
  下一个语句是:
  fruit = apples + oranges; // Get the total fruit
  这也是一个赋值语句,但稍有不同,因为在赋值运算符的右边是一个算术表达式。这个语句把存储在变量apples和oranges中的数值相加,然后在变量fruit中存储结果。
  下面的3个语句是:
  cout << endl; // Start output on a new line
  cout << "Oranges are not the only fruit... " << endl
  << "- and we have " << fruit << " fruits in all.";
  cout << endl; // Output a new line character
  它们都是输出语句。第一个语句把由endl表示的换行符发送到屏幕的命令行中。在C++中,输入的来源或输出的目的地称为流。名称cout指定“标准的”输出流,运算符<<表明,该运算符右边的内容将发送到输出流cout。<<运算符“指出”数据流动的方向,从这个运算符右边的变量、字符串或表达式到左边的输出目的地。因此,在第一个语句中,由名称endl表示的值(即换行符)将发送到由名称cout标识的流—— 传输到cout的数据会写入命令行。把endl发送到流,也会刷新流缓存,然后把所有输出发送到命令行。
  名称cout和运算符<<的含义定义在头文件iostream中,该文件利用#include指令在程序代码中添加。cout是标准库中的名称,所以它在名称空间std内。如果不使用using指令,就不会识别cout,除非使用了其全限定名std::cout。cout定义为表示标准输出流,因此不应当把它用于其他目的,将相同的名称用于不同的事情很可能引起混淆。
  第2个输出语句扩展成如下两行:
  cout << "Oranges are not the only fruit... " << endl
  << "- and we have " << fruit << " fruits in all.";
  如前所述,每个语句都可以扩展成许多行。语句的结束始终用分号表示,而不是一行的结束。编译器将读取连续的行,并把它们组合成一个语句,直至发现定义该语句结束的分号。当然,这也意味着,如果忘记在语句的结尾处放置分号,那么编译器将假定下一行是同一语句的一部分,并将它们连接到一起。这通常会产生编译器无法理解的东西,所以您将得到一个错误消息。
  这个语句将文本字符串"Oranges are not the only fruit…"发送到命令行,后跟另一个换行符(endl),然后是另一个文本字符串"- and we have ",接着是存储在变量fruit中的值,最后是另一个文本字符串"fruits in all."。可以按照这种方法把想输出的一系列内容串起来。这个语句从左向右执行,每一项都依次发送到cout。注意,发送到cout的每一项的前面都有自己的<<运算符。
  第三个也就是最后一个输出语句把另一个换行符发送到屏幕,这3个语句将生成前述的输出。这个程序中的最后一个语句是:
  return 0; // Exit the program
  它将终止main()函数的执行,从而停止这个程序的执行。控制权返回到操作系统,返回的代码0告诉操作系统:应用程序成功终止。忽略main()的return语句,程序应能编译并执行。本章的后面将详细地讨论所有这些语句。
  程序中的语句按照编写它们的顺序执行,除非一个语句明确改变了这个自然顺序。第3章将讨论改变执行顺序的语句。
  2.1.3 空白
  空白包含空格、制表符、换行符、换页符和注释的任意序列。空白将语句的各个部分分隔开,从而使编译器能够识别语句中的一个元素(如int)在何处结束,下一个元素在何处开始。否则,将忽略空白,且不会产生任何影响。
  以下面的语句为例:
  int fruit; // ...then another one
  为了使编译器能够区分int和fruit,它们之间至少有一个空白字符,但是如果添加更多的空白字符,它们将被忽略。这一行分号后面的内容全部是空白,所以都被忽略。
  另一方面,下面的语句:
  fruit = apples + oranges; // Get the total fruit
  fruit和=之间,=和apples之间不需要空白字符,但也可以添加一些空白字符。这是因为=不是字母或数字字符,所以编译器可以将它与其周围的内容区分开。类似地,符号+的两边也不需要有空白字符,但是也可以添加一些。
  除了在语句元素之间用作分隔符的空白之外,编译器将忽略其他空白(当然,在双引号之间的一串字符中使用的空白除外)。可以添加一些空白,使程序更具可读性,记住,每当出现分号时,语句就结束。
  2.1.4 语句块
  可以把几个语句括在一对大括号中,这时它们就变成了块或复合语句。函数体就是块的一个示例。可以把这样的复合语句看成单个语句(在第3章讨论判断语句时,将看到这种情况)。只要是可以放单个语句的地方,都可以放置一个用大括号括起来的语句块。因此,块可以置入其他块中。实际上,块可以嵌套(一个块在另一个块内)至任意深度。
  2.1.5 自动生成的控制台程序
  上一个示例生成了一个没有源文件的空项目,然后添加了源文件。如果允许Application Wizard生成这个项目,如第1章所述,则这个项目将包含几个文件,下面深入分析它们的内容。创建一个新的Win32控制台项目Ex2_01A,这次允许Application Wizard完成这个项目,而不在Application Settings对话框中设置任何选项。这个项目有4个包含代码的文件:Ex2_01A.cpp和stdafx.cpp源文件、stdafx.h头文件以及targetver.h文件,其中targetver.h文件指定能运行应用程序的Windows的最早版本。这表示一个不执行任何任务的有效程序。从主菜单上选择File | Close Solution菜单项,可以关闭打开的项目。在现有项目打开的情况下,可以创建一个新项目,这时将自动关闭旧项目,除非选择在相同的解决方案中添加它。
  Ex2_01A.cpp的内容是:
  // Ex2_01A.cpp : Defines the entry point for the console application.
  //
  #include "stdafx.h"
  int _tmain(int argc, _TCHAR* argv[])
  {
  return 0;
  }
  这确实和前一个示例不同。其中有一个用于stdafx.h头文件的#include指令,和程序执行的起始函数_tmain(),而不是main()。第5章将介绍函数头中圆括号的内容。
  1. 预编译的头文件
  Application Wizard生成的stdafx.h头文件是该项目的一部分,观察一下其中的代码,将看到还有3个#include指令,分别用于前面提到的targetver.h头文件,以及标准库头文件stdio.h和tchar.h。stdio.h是用于标准I/O的老式头文件,在C++当前的标准出台之前使用,它的功能和iostream头文件类似,但没有定义相同的名称。这个控制台示例使用iostream符号,所以需要包含它。tchar.h是Microsoft特有的头文件,它定义文本函数。
  stdafx.h仅在修改代码时编译,而不是在每次编译程序时重新编译它。编译stdafx.h会得到一个.pch文件(预编译的头文件),只有没有对应的.pch文件,或者.pch文件的时间戳比stdafx.h文件的时间戳早,编译器才重新编译stdafx.h。一些标准库头文件非常大,所以这个功能可以显著减少编译项目所需的时间。如果仅在Ex2_01A.cpp中给iostream包含#include指令,则每次编译程序时,都重新编译它。如果把它放在stdafx.h中,iostream就只编译一次。因此,stdafx.h应包含不常修改的所有头文件的#include指令。这包括项目的标准头文件和很少修改的所有自定义项目头文件。在学习C++时,不会使用出现在stdafx.h中的这两种头文件。
  2. Main函数名
  如前所述,在编写使用Unicode字符的程序时,Visual C++支持wmain()作为main()的替代函数, wmain()是main()的Microsoft特有定义,不是标准C++的一部分。tchar.h头文件定义了名称_tmain,它一般由main取代,但是如果定义了符号_UNICODE,它就由wmain取代。为了把程序标识为使用Unicode,需要在stdafx.h头文件的开始处添加下列语句:
  #define _UNICODE
  #define UNICODE
  为什么需要两个语句?定义符号_UNICODE,会让Windows头文件假定,Unicode字符是默认的。定义_UNICODE会给C++标准库附带的C例程头文件带来相同的效果。Ex2_01A项目并不需要这么做,因为Character Set项目属性默认设置为使用Unicode字符。前面详细解释了main()函数,C++控制台示例坚持使用普通但成熟的main()函数,它是标准C++函数,因此是可移植性最好的编码方法。
  2.2 定义变量
  在所有的计算机程序中,一个基本的目标是操作数据,获得结果。这个过程中的一个基本元素是获得一段内存,可以称其为自己的内存,使用一个有意义的名称引用它,并在其中存储一条数据。所指定的每段内存都称为一个变量。
  我们知道,每种变量都存储一种特定的数据,在定义了变量后,它可以存储的数据类型就是固定的。储整数的变量,就不能存储小数。变量在某一时刻包含的值由程序中的语句确定,随着程序计算的进展,它的值通常多次改变。
  2.2.1 命名变量
  变量的名称(其实是C++中所有事物的名称)可以是任意字母和数字的序列,其中下划线_算作字母,其他字符则不允许使用,如果在名称中使用了一些其他字符,编译程序时就会得到一个错误消息。名称必须以字母或下划线开头,通常表明所存储的信息的种类。名称也称为标识符。
  在Visual C++中,变量名最长可以有2048个字符,因此给变量命名有相当大的灵活性。如果使用长名称会使程序难以阅读,除非键盘技巧很高,否则长名称很难输入。更严重的问题是,并非所有编译器都支持这么长的名称。事实上,很少需要使用10或15个字符以上的名称。
  最好避免使用以下划线开头、且包含大写字母的名称,如_Upper和_Lower,因为它们可能与相同形式的标准库名称发生冲突。由于同样的原因,还应当避免使用以双下划线开头的名称。
  下面是一些有效的变量名:
  price discount pShape value_ COUNT
  five NaCl sodiumChloride tax_rate
  涉及两个或多个单词的有意义的名称可以用各种方式构建:第二个单词和以后各单词的首字母大写,或者在各单词之间插入下划线。前面列表里有一些示例。本书的代码中给名称使用各种样式,但最好在一个程序中只使用一种样式。
  8_Ball、7Up和6_pack不是合法的名称。Hash!或Mary-Ann也不是合法的名称。最后这个示例是一个很常见的错误,但带有下划线的Mary_Ann是合法的。当然,Mary Ann不是合法的名称,因为变量名不允许有空白。名称republican和Republican是不同的,因为名称是区分大小写的。一个常见的约定是类名以大写字母开头,变量名以小写字母开头,参见第8章。
  ……

前言/序言

  欢迎使用本书。通过学习本书,你可以使用Microsoft公司最新的应用程序开发系统Visual Studio 2013,成为优秀的C++程序员。本书旨在讲述C++程序设计语言,然后讲述如何运用C++语言开发自己的Windows应用程序。在此过程中,读者将了解这一最新Visual C++版本所提供的很多激动人心的新功能。
  Visual C++ 2013是Microsoft开发环境Visual Studio Professional 2013的所有版本的一部分,本书提到Visual C++时,都是指Visual Studio Professional 2013包含的Visual C++ 2013功能。注意Visual Studio Express 2013版本没有提供本书的全部功能。第11到18章的示例不能用Visual Studio Express 2013创建。
  0.1 本书读者对象
  本书针对任何想要学习如何使用Visual C++编写在Microsoft Windows操作系统下运行的C++应用程序的读者。阅读本书不需要预先具备任何特定编程语言的知识。如果属于下列3种情形之一,你就适合学习本教程:
  ●  属于编程新手,十分渴望投入编程世界,并最终掌握C++。要取得成功,你至少需要对计算机的工作原理有大体的理解。
  ●  具备一些其他语言的编程经验,如BASIC;渴望学习C++,并想提升实际的Microsoft Windows编程技能。
  ●  有一些使用C语言或C++语言的经验,但使用环境不是Microsoft Windows;希望使用最新的工具和技术,扩展在Windows环境下编程的技能。
  0.2 本书主要内容
  本书的第一部分通过一个详细的循序渐进式教程,讲授了使用Visual Studio Professional 2013编写C++程序的基础知识。你将了解C++语言的语法和用法,并通过有效的示例,获得实际运用它的经验和信心,示例代码演示了C++的几乎所有方面。本书也提供了一些练习,可以检验所学的知识,并且可以下载练习题答案。
  本语言教程也介绍和说明了C++标准库功能的用法,因为开发程序时极有可能使用它们。随着深入地学习C++语言,你的标准库知识会不断增加。还将学习标准模板库(Standard Template Library,STL)提供的强大工具。
  对C++的运用有信心之后,就可以继续学习Windows编程了。通过创建超过2000行代码的大型可运行的应用程序,学习如何使用MFC来开发Windows桌面应用程序。开发此应用程序贯穿多章内容,用到了MFC提供的一系列用户界面功能。还要学习如何编写面向平板电脑、运行Windows 8的应用程序,通过循序渐进地开发一个有效的游戏示例,来学习如何创建带有Windows 8现代界面的应用程序。
  0.3 本书结构
  本书内容的结构安排如下:
  ●  第1章介绍使用C++编写程序所需要理解的基本概念,以及在Visual C++开发环境中体现的主要思想,还叙述了如何使用Visual C++的功能来创建本书其余部分要学习的各种C++应用程序。
  ●  第2~9章讲授C++语言。首先是简单的过程式程序示例,然后学习类和面向对象的编程。
  ●  第10章介绍如何使用标准模板库(Standard Template Library,STL)。STL是一组功能强大且全面的工具,用来组织和操作C++程序中的数据。由于STL是独立于应用程序的,因此可以在上下文中大量应用它。
  ●  第11章讨论Microsoft Windows桌面应用程序的组织方式,并描述和展示了在所有为Windows操作系统编写的桌面应用程序中都存在的基本元素。本章通过基础示例解释了Windows应用程序的工作原理,还将创建使用C++语言、Windows API和MFC的程序。
  ●  第12~17章讲述Windows桌面应用程序的编程。详细描述了如何使用MFC提供的构建GUI的功能编写C++ Windows应用程序。我们将学习如何创建并使用通用控件来构建应用程序的图形用户界面,还将学习如何处理因用户与程序的交互作用而产生的事件。除了学习构建GUI的技术以外,还将从开发该应用程序的过程中学到如何打印文档,以及应用程序如何处理文件。
  ●  第18章讲述为Windows 8编写应用程序的基本概念,开发一个使用Windows 8现代用户界面的完整、有效的应用程序。
  本书各章内容都包括许多工作示例,通过这些示例阐明所讨论的编程技术。每章结束时都总结了该章所讲述的要点,大多数章节都在最后给出了一组练习,可以应用所学的技术来试着解答这些练习。练习的答案连同书中的所有代码都可以从Wrox出版社的网站上下载。
  0.4 使用本书的前提
  Visual Studio 2013有几个版本,它们都有不同的功能。本书假定你安装了Visual Studio Professional 2013(或更高版本)。换言之,只要安装付费的Visual Studio 2013版本即可。如果你是全日制学生,则可以使用低成本的学生版本。只安装免费的Express版本是不够的。
  如果安装了Visual Studio和Windows 7或Windows 8,就可以使用第1~17章的使用示例和练习,要使用第18章的示例,Visual Studio的版本必须安装在Windows 8环境下。
  第2~10章的示例可以使用Windows桌面的Visual Studio Express 2013创建和执行,但第11~18章的示例不行。
  0.5 源代码
  读者在阅读本书提供的代码时,既可以亲自输入所有代码,也可以使用随书提供的代码文件。本书所有代码均可以从http://www.wrox.com/或http://www.tupwk.com.cn/downpage网站下载。进入该网站后,读者可以根据本书的书名查找本书(既可以使用搜索框,也可以使用书名列表进行查找),然后单击本书详细内容页面上提供的Download Code链接,就可以下载本书提供的所有代码。
  注意:
  由于许多书籍名称与本书类似,读者也可以通过ISBN进行查找,本书的ISBN为:978-1-118-84571-4。
  另外,读者可以从前面提到的CodePlex网站下载本书或其他Wrox书籍的代码,也可以从Wrox的代码下载页面http://www.wrox.com/dynamic/books/download.aspx和http://www. tupwk.com.cn/downpage下载本书或其他Wrox书籍的代码。
  0.6 练习
  许多章节都有一组练习用于检验你所学的知识。尽量完成所有的练习。如果有问题,可以从http://www.wrox.com/go/beginingvisualc上下载练习题的答案。
  0.7 勘误表
  为了避免本书文字和代码中存在错误,我们已经竭尽全力。然而,世界上并不存在完美无缺的事物,所以本书可能仍然存在错误。如果读者在我们编写的某本书籍中发现了诸如拼写错误或代码缺陷等问题,那么请告诉我们,我们对此表示感谢。利用勘误表反馈错误信息,可以为其他读者节省大量时间,同时,我们也能够受益于读者的帮助,这样有助于我们编写出质量更高的专业著作。
  如果读者需要参考本书的勘误表,请在网站http://www.wrox.com中用搜索框或书名列表查找本书书名。然后,在本书的详细内容页面上,单击Book Errata链接。在随后显示的页面中,读者可以看到与本书相关的所有勘误信息,这些信息是由读者提交、并由Wrox的编辑们加上的。通过访问http://www.wrox.com/misc-pages/booklist.shtml,读者还可以看到Wrox出版的所有书籍的勘误表。
  如果读者没有在Book Errata页面上找到自己发现的错误,那么请转到页面http://www. wrox.com/contact/techsupport.shtml,针对你所发现的每一项错误填写表格,并将表格发给我们,我们将对表格内容进行认真审查,如果确实是我们书中的错误,我们将在该书的Book Errata页面上标明该错误信息,并在该书的后续版本中改正。
  0.8 关于p2p.wrox.com论坛
  如果读者希望能够与作者进行讨论,或希望能够参与到读者的共同讨论中,那么请加入p2p.wrox.com论坛。该论坛是一个基于Web的系统,读者可以在论坛发表与Wrox出版的书籍及相关技术的信息,并与其他读者和技术用户进行讨论。论坛提供了订阅功能,可以将与读者所选定主题相关的新帖子定期发送到读者的电子邮箱。Wrox的作者、编辑、业界专家,以及其他读者都会参与论坛中的讨论。
  读者可以在http://p2p.wrox.com参与多个论坛的讨论,这些论坛不仅能够帮助读者更好地理解本书,还有助于读者更好地开发应用程序。如果读者希望加入论坛,那么请按照以下步骤执行:
  (1) 进入http://p2p.wrox.com页面,单击Register链接。
  (2) 阅读使用条款,然后单击Agree按钮。
  (3) 填写必要的信息及可选信息,然后单击Submit按钮。
  (4) 随后读者会收到一封电子邮件,邮件中说明了如何验证账户并完成整个加入过程。
  读者无须加入P2P论坛即可阅读论坛消息,但如果需要发表主题或发表回复,那么必须加入论坛。
  成功加入论坛后,读者就可以发表新主题了。此时,读者还可以回复其他用户发表的主题。读者在任何时间都可以阅读论坛信息,如果需要论坛将新的信息发送到自己的电子邮箱,那么可以单击论坛列表中论坛名称旁的Subscribe to this Forum图标完成这项功能设置。
  如果读者需要获得更多与Wrox P2P相关的信息,请阅读P2P FAQs,这样可以获得大量与P2P和Wrox出版的书籍相关的具体信息。阅读FAQs时,请单击P2P页面上的FAQs链接。

用户评价

评分

专业书,为了多了解,多学习而买的。

评分

书是正版,物流也快。

评分

打折期间买的,很给力,经典图书

评分

很喜欢Horton系列的书,这本潜移默化地加入了c++11的内容,非常值得一看。

评分

分上下册多好,太厚了!

评分

这个还是很不错...

评分

正版,印刷清晰,慢慢学习

评分

发现现在的vc不是以前6.0那个vc了,赶紧买来再看看~

评分

此用户未填写评价内容

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有