《面向对象Visual C++编程技巧》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)(M.安德鲁斯)Mark Andrews著;綦建平等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:1997
  • ISBN:7505337742
  • 页数:652 页
图书介绍:

引言 1

第一部分 Visual C++ 1

第一章 Microsoft Visual C++ 1

关于Visual C++ 1

目 录 1

Visual C++的其它特点 2

The Visual Work bench编辑器 2

标准版和专业版 5

安装Visual C++需做哪些准备 6

安装Visual C++ 6

单步和多步安装 7

The Visual Work bench 7

使用Visual C++ 8

编写一个Visual C++程序 9

关于Quick Win 9

Visual C++的project 10

建立一个Quick Win示例程序 11

小结 14

C++发展简史 15

第二章 良好的C++ 15

学习C++语言 16

C++的注解行 19

一个较好的办法 19

C语言和C++的混合注释 19

关键字 20

C++的关键字:完整的关键字表 20

Visual C++中未实现的关键字 22

Visual C++独有的关键字 23

标识符 24

数据类型 25

类 25

字符型 25

整型 26

浮点型 26

聚合数据类型 27

结构 30

联合 33

指针类型 35

Void类型 36

引用类型 36

typedef说明语句 38

小结 39

第三章类型限定语 40

const限定语 40

const限定语的使用 40

C语言和C++中的const对象 41

使用const限定语的优点 41

用函数初始化一个const 42

const对象的新特点 42

const对象的增强性能 42

返回const对象的函数 43

把一个const数组传递给函数 43

const修饰语如何工作 44

修改一个const对象的链接 44

在指针说明语句中使用一个const 44

使用带指针的常量 45

何时常量不是const? 45

在哪里放置一个const 46

指向一个const的地址 46

指向const对象的const指针 47

Volatile限定语 47

Volatile限定语的作用 47

说明一个对象既是const又是Volatile 48

小结 48

第四章变量 49

C++中的变量说明 49

初始化与赋值 50

初始化一个const 51

初始化外部数据 51

初始化常量和引用 51

初始化一个引用 51

函数形式的初始化 52

引用 54

定义引用 54

引用的作用能力 56

初始化引用 56

用作别名的引用 57

利用值来传递自变量 59

把引用作为参数传递给函数 59

利用地址传递自变量 60

利用引用传递自变量 61

如何不使用引用 62

访问被引用结构的元素 62

编写一个返回引用的函数 63

使用对Const对象的引用 65

小结 65

存储类 66

外部存储类 66

第五章变量的特性 66

静态存储类 67

作用域 69

局部作用域 69

函数作用域 70

文件作用域 70

原型作用域 71

解决标识符名字中的冲突 71

作用域的优先级 71

作用域分解运算符 72

说明的位置 72

生存期 73

链接 73

小结 74

第六章函数 75

main()函数 75

定义一个函数 76

c++形式的函数定义 77

函数原型的例子 78

函数原型 78

建立函数原型的规则 79

重载函数 80

使用函数重载 80

名字mangling 81

lnline函数 81

缺省的函数自变量 82

可变的自变量表 83

C语言中可变的自变量表 83

C++中可变的自变量表 83

编写可变的自变量表 84

STDARG.H函数 85

给函数传递自变量…………………………………………………………………………………(8?)维护传递函数数据的安全性………………………………………………………………………把一个自变量说明为一个常量 87

调用函数来初始化常量 88

小结 89

第七章编译Visual C++程序 90

建立一个Visual C++程序 90

加快编译速度 91

使用预编译的文件 91

编译一个Visual C++程序 91

使用快速编译选项 92

使用Disk-caching程序 92

使用RAM程序 92

标识符 92

把程序编译成P代码 92

C和C++编译程序 93

利用Visual Workbench编译程序 93

New Project对话框 94

Project Options对话框 95

Quick Win程序和其它应用 95

把系统配置成适于使用命令行编译 98

Visual C++预处理器 99

头文件 100

头文件的使用 100

头文件的内容 101

头文件的嵌套 101

带括号〈 〉和引号“”的#include指令 101

预编译的头文件和预编译的文件 102

预处理器如何找到头文件 102

#define指令 103

用#define建立常量 104

#define指令的局限性 104

用#define建立宏 105

条件编译指令 106

用编译指令来写注释 107

#if指令 107

#else和#elif指令 108

#ifdef和#else指令的组合 108

Charizing 109

其它的预处理指令 109

Visual C++预处理器的特性 109

Stringizing 110

Token合并 111

三字符组的替换 113

预定义的宏 113

小结 114

建立一个project 115

Linker按钮 115

第八章链接Visual C++程序 115

使用Linker Options对话框 116

获得命令行选项的帮助信息 117

链接一个C++程序 117

Visual C++提供的库 117

C++与其它语言的混合 118

名字mangling 119

可供选择的链接说明 119

extern关键字 119

函数修饰语 120

链接说明的影响力 120

C语言调用规范 121

Pascal/FORTRAN调用规范 122

寄存器调用规范 123

——asm修饰语 123

第九章存储管理 125

关于本章 125

分段存储 126

分段存储的工作原理 126

near调用和far调用 127

存储段和段边界 127

80×86芯片的段寄存器 127

段如何进行覆盖 128

段:偏移量寻址 128

存储模式 128

实模式 128

保护模式 129

标准模式和增强模式 129

标准模式 129

存储模型的机理 130

增强模式 130

存储模型 130

存储模型与指针 131

覆盖和MOVE实用程序 131

存储模型的判断 132

使用存储模型的优点 132

六个存储模型 133

Tiny存储模型 133

Small存储模型 133

Huge存储模型 134

near指针 134

关于Visual C++中指针的使用 134

Medium存储模型 134

Large存储模型 134

Compact存储模型 134

far指针 135

huge指针 135

new操作符的实现方法 136

new和delete操作符 136

指向未说明的数据类型的指针 136

指向void的指针 136

给存储空间初始化一个值 137

new操作符的使用 137

给数组分配存储空间 139

交互地分配存储空间 139

给无定长的数组分配存储空间 140

释放分配给数组的存储空间 140

通过调用函数分配存储空间 141

低级存储条件的处理 142

delete操作符的使用 142

_set_new handler()函数 143

new如何分配存储空间 144

near,far和基本存储空间 144

重载new和delete操作符 144

operator new()和operator delete()函数 144

size_t类型 146

给new操作符增加参数 146

重载_set_new_handler() 147

使用new修改存储池(memory pools) 147

保存和恢复一个新的handler 148

恢复_set_new_handler()的缺省行为 148

可修改的_set_new_handler()函数 148

Windows环境下的存储管理 148

Windows系统的工作情况 149

Windows和段寄存器 149

描述符 150

小结 151

关于OOP 153

容易误解的概念 153

第二部分面向对象的程序设计 153

第十章面向对象的程序设计 153

OOP的争议点 154

OOP的原理 154

OOP是如何开始的 155

从COBOL到Simula 155

C++的出台 155

代码重用 156

C++的益处 156

C++程序设计的技巧与宗旨 157

华尔街(Wall Street)的模拟 158

一个工厂的仿真 158

项目(projects)规划中的问题 160

C++的词典 160

C++的特性 162

数据封装与数据抽象 163

多重继承 164

继承性 164

多形性 165

C++程序的组成元素 167

类和对象 167

成员变量 168

成员函数 168

小结 168

第十一章类 170

struct性能的增强 170

对一个struct中的数据的访问限制 171

在struct中保存一个函数 171

C++风格的struct 171

从struct到class 172

例示(initiating)一个对象 173

对象例示的图例 173

访问类的成员 173

成员函数 174

域分解操作符 175

访问限定语 175

类和对象 176

类的图解 181

Zalthar程序中的数据抽象 182

抽象类 183

类的细化(subclassing) 183

虚函数 185

另外一个程序例子 188

类库 190

小结 191

第十二章对象 192

从结构到对象 192

C语言结构的缺点 194

对象的使用 195

如何建立对象 195

初始化对象的两种方法 195

定义一个对象的内容 195

构造函数 196

析构函数 201

成员变量 201

指向成员变量的指针 201

成员变量数组 204

静态成员变量 206

常量型成员变量 206

静态成员函数 213

为对象分配存储空间 213

动态地分配存储空间 214

框架分配 215

堆分配 216

访问对象的成员 217

在函数头中使用(::)操作符 219

封装(Encapsulation) 222

访问限定语 222

对访问限定语的解释 224

使用访问限定语 224

public访问限定语 225

private访问限定语 225

protected访问限定语 226

公用的派生类和私有派生类 226

公用的派生(public Derivation) 226

建立一个类的多个对象 227

建立对象数组 227

私有的派生(private Derivation) 227

建立指向对象的指针数组 231

设计类的技术 233

嵌套类 233

复合类 234

局部类 235

友元类(friend class) 236

不完全类说明 236

空类 237

this指针 238

具有静态生存周期的对象 238

具有外链接的对象 238

对象的作用域和链接 238

小结 240

第十三章成员函数 241

成员函数的功能 241

成员函数的种类 241

访问成员函数 241

说明和定义成员函数 243

指定成员函数的返回值 244

const和volatile关键字 245

具有常量型this指针的成员函数 246

具有可变的this指针的成员函数 247

静态和非静态的成员函数 249

inline成员函数 249

inline成员函数的工作过程 251

访问一个inline成员函数 251

inline成员函数和栈 252

重载成员函数 252

虚函数和多形性 253

超越(overriding)成员函数 253

虚函数 253

纯虚函数 254

友元(friend) 254

friend关键字 254

友元类和友元函数 256

建立友元类之间的联系桥梁(Bridge) 257

使用“桥”(bridge)函数的另一种选择形式 259

静态成员函数 260

static关键字 266

初始化一个静态成员变量 267

使用静态成员函数 267

指向成员函数的指针 268

使用指向普通函数的指针 268

使用指向成员函数的指针 269

指向成员函数的指针数组 270

指向静态成员函数的指针 272

小结 273

两类构造函数 275

建立构造函数 275

第十四章构造函数和析构函数 275

建立无构造函数的对象 277

析构函数 277

安全地使用析构函数 277

如何调用析构函数 278

使用析构函数 278

析构的序 278

构造函数的工作过程 279

Zalthar程序中的析构函数 279

构造函数的种类 280

调用一个构造函数 282

调用构造函数的其它方法 282

使用构造函数的基本规则 283

使用构造函数的优点 283

构造函数有助于存储管理 284

构造函数可以进行初始化和对值进行检查 284

转换构造函数和复制构造函数 286

用构造函数初始化变量 286

缺省的构造函数 288

何时调用缺省的构造函数 289

构造函数重载 289

调用一个缺省的构造函数 289

使用构造函数 290

具有多个构造函数的类 294

构造的顺序 295

在warrior程序中调用构造函数 296

构造一个const对象 296

按顺序的构造 296

小结 298

第十五章函数重载 299

函数重载的原理 299

函数重载的基本规则 300

自变量匹配 301

自变量匹配的工作原理 304

自变量匹配的步骤 304

函数重载和作用域 307

重载构造函数 308

派生类中的重载函数 309

重载虚函数 310

作用域分解操作符 310

重载静态成员函数 311

转换函数 312

小结 314

第十六章操作符重载 315

操作符重载的工作原理 315

操作符重载的一个例子 315

编写操作符重载函数 316

算术操作中使用操作符重载 316

操作符重载函数的作用域 317

操作符重载函数的格式 317

重载一元和二元操作符 317

可被重载的操作符 318

操作符重载:秘密与技巧 318

不可重载的操作符 319

C++如何实现操作符重载 320

操作符重载的规则 321

重载++和--操作符 322

重载操作符的成员函数 322

重载二元操作符+和- 325

重载+=操作符 327

重载=操作符 329

重载关系操作符 345

重载[ ]操作符 347

重载( )操作符 350

重载&操作符 351

重载->操作符 352

重载数据类型 357

重载new和delete 358

重载new和delete的规则 360

非成员的重载函数 361

编写一个非成员的操作符重载函数 362

一个操作符重载的友元函数 363

另一个操作符重载友元函数 365

小结 367

第十七章转换函数 368

转换函数的工作过程 368

函数风格的casts(造型) 369

造型(Casting) 369

造型带来的麻烦 369

使用函数风格的casts 370

函数风格casts的使用规则 370

转换用户自定义的数据类型 370

转换构造函数 371

为转换函数定义一个类 373

定义一个转换构造函数 373

把一个变量转换成一个具有多个元素的类 374

一个更高级的转换函数 376

把一个变元转换成一个多元素的类 377

TIME.H库中的函数 377

转换构造函数的执行步骤 378

成员转换函数 379

编写一个成员转换函数 379

成员转换函数的操作过程 380

使用成员转换函数 381

成员转换函数示例 382

小结 384

1705.CPP程序中使用的数据类型 384

第十八章复制对象 385

复制构造函数和Operator=函数 385

编写一个Operator=函数 386

调用一个复制函数 386

举例说明析构的问题 387

编写一个复制构造函数 389

operator=函数的工作过程 392

strcpy()函数 394

复制串 394

此程序的工作过程 398

给串分配存储空间 398

存储分配的另一种选择 399

在Zalthar程序中增加一个串类 399

新的Zalthar程序的工作过程 404

串类(sting classes) 405

串类的功能 405

使用重载的赋值操作符 406

赋值操作符重载 406

用复制构造函数初始化一个串对象 406

使用串类 406

小结 407

第十九章继承性与多形性 408

派生类 408

使用派生类的理由 408

使用派生类的好处 409

新的Zalthar程序的层次结构 414

构造函数和析构函数的继承原则 415

通过指针来访问对象 417

虚函数 418

调用虚函数 418

纯虚函数 418

超越虚函数 421

域分解操作符 422

虚函数如何实现 422

虚函数:正论与反论 424

多重继承性 424

多重继承性图解 424

动物王国里的多重继承性 425

虚基类 427

继承链中的函数名冲突 428

小结 430

第二十章流(streams) 431

iostream类是如何实现的 431

iostream库 433

与流相关的头文件 433

Microsoft iostream类库 433

ios类和它的子类 434

iostream的层次结构 434

使用流 437

流中的混合数据类型 438

格式化输出 439

setw设备操作符 444

设置补白字符(padding characters) 445

cin〉〉和cout〈〈的多种选择形式 445

cin〈〈的操作符的多种选择形式 446

cout〈〈操作符的多种选择形式 449

重载〉〉操作符 450

重载〈〈和〉〉 450

重载〈〈操作符 450

文件的输入/输出(I/O) 451

打开,使用和关闭一个流文件 452

文件流 452

Of stream和ifstream类 452

fstream类 453

小结 457

第二十一章 The Microsoft Foundation Classes(MFC) 459

第三部分MFC库 459

多种用途的类 460

Cobject类 461

使用Cobject类的优点 461

串行化(serialization) 462

DYNACREATE宏 467

DYNAMIC宏 467

诊断帮助 468

异常处理 471

其它的MFC类 472

文件类 473

收集(collection)类 474

CString类 475

与时间相关的类 475

程序范例 476

程序范例的层次结构 476

编译程序范例 477

运行程序范例 478

小结 497

消息驱动的(message-driven)程序 499

Visual Workbench的组成部分 499

第二十二章 The Visual Workbench 499

C++程序的层次结构 500

Win Main()函数 501

文档和视图 501

Visual Workbench的工具 503

App Wizard 504

App Studio 508

建立人物对话框的工作过程 513

ClassWizard的工作原理 515

使用ClassWizard 515

ClassWizard窗口 515

命令联编(binding) 517

建立对话框 517

程序范例 520

小结 562

第二十三章窗口和视图 564

文档和视图的实现原理 565

CDocument类的特征 565

使用文档 566

CView类的特征 566

Visual C++中Windows(窗口)的工作机理 567

Windows的类 567

CWnd类 568

Windows的五个大类 568

对话框 576

CDialog类 576

对话框的工作原理 577

按照旧的方式检索数据 580

小结 581

第二十四章Visual C++的图形 582

CDC类 582

CDC的子类 583

CGdiObject类 583

使用CDC和CGdiObject类 584

名字的含义 584

在Visual C++中创建图形 584

OnPaint()函数和OnDraw()函数 586

Visual C++图形的建立步骤 586

OnDraw()函数的使用步骤 587

用CDC和GDI对象画出文本 588

创建和删除图形对象 588

图形对象的单步创建过程 589

图形对象的两步建立过程 589

在Visual C++中使用位图 590

创建一个位图对象 590

画不规则形状 593

画出Zalthar程序中的游戏人物 594

动画 596

Zalthar:最后一幕 598

小结 639

附录A ASCII码表 641

附录B 80×86芯片家族 643

8086和8088处理器 643

8086,8088和实模式 643

段:偏移量寻址的机理 643

段寄存器和偏移量寄存器 644

段:偏移量寻址中存在的模糊性 645

段:偏移量寻址:一个更复杂的例子 645

80286微处理器 647

保护模式和段:偏移量寻址 647

386处理器 648

386的保护模式 648

虚拟8086模式 649

486处理器 649

在C++程序中使用指针 649

参考文献 651