按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
【 】。如果你选择 ( 1…9a),你会看到执行线程 (优
1 2
先权最高)几乎一路冲到底,然后才是执行线程 (优先权次之),然后是执行线程 (优
。。。 ! §sleep delay! ¨ 图
先权再次之) 。但如果你选择的 ( 1…9b),所有执行线程不分优先权高
低,同时行动。关于执行线程的排程问题,我将在第14 章做更多的讨论。
图 的执行画面 ( ! ¨ ! ¨ )
1…9a Mlt iTh rd 。exe fo r lo o p d e la y
图 的执行画面 ( ! ¨ ! ¨ )
1…9b Mlt iTh rd 。exe s le e p d e la y
图 1 2~4 CPU
注意:为什么 1…9a 中执行线程 尚未完成,执行线程 竟然也有机会偷得一点点 时
间呢?这是排程器的巧妙设计,动态调整执行线程的优先权。是啊,总不能让优先权低的
执行线程直到天荒地老,没有一点点获得。关于执行线程排程问题,第14章有更多的讨论。
52
…………………………………………………………Page 115……………………………………………………………
图 Process Viewer Visual C++ 5。0 Mltithrd。exe
1…10 是以 ( 所附工具)观察 的执行结果。
图上方出现目前所有的进程,点选其中的MLTITHRD。EXE ,果然在窗口下方出现六个执
行线程,其中包括主执行线程(优先权已被调整为10)。
图 利用 ( )观察
1…10 Proces s Viewe r PVIEW95。EXE MLTITHRD。EXE
的执行, 的确发现有六个执行线程, 其中包括一个主执行线程。
53
…………………………………………………………Page 116……………………………………………………………
54
…………………………………………………………Page 117……………………………………………………………
第 2章
C++ 的重要性质
C++ 是一种扭转程序员思维模式的语言。
一个人思维模式的扭转,不可能轻而易举一蹴而成。
迩来「对象导向」一词席卷了整个软件界。对象导向程序设计(Object Oriented
Programming )其实是一种观念,用什么语言实现它都可以。但,当然,对象导向程序语
言(Object Oriented Programming Language )是专门为对象导向观念而发展出来的,以之
完成对象导向的封装、继承、多态等特性自是最为便利。
C++ C C
是最重要的对象导向语言,因为它站在 语言的肩膀上,而 语言拥有绝对优势
的使用者。C++ 并非纯然的对象导向程序语言,不过有时候混血并不是坏事,纯种也不
见得就多好。
所谓纯对象导向语言,是指不管什么东西,都应该存在于对象之中。JAVA 和Small Talk
都是纯对象导向语言。
如果你是C++ 的初学者,本章不适合你(事实上整本书都不适合你),你的当务之急
是去买一本C++ 专书。一位专精Basic 和Assembly 语言的朋友问我,有没有可能不
会C++ 而学会MFC ?答案是当然没有可能。
如果你对C++ 一知半解,语法大约都懂了,语意大约都不懂,本章是我能够给你的最
好礼物。我将从类别与对象的关系开始,逐步解释封装、继承、多态、虚拟函数、动态
绑定。不只解释其操作方式,更要点出其意义与应用,也就是,为什么需要这些性质。
55
…………………………………………………………Page 118……………………………………………………………
C++ 语言范围何其广大,这一章的主题挑选完全是以MFC Programming 所需技术为前
提。下一章,我们就把这里学到的C++ 技术和OO 观念应用到application framework 的
仿真上,那是一个DOS 程序,不牵扯Windows 。
类别及其成员 谈封装 ( )
encapsulation
让我们把世界看成是一个由对象(object )所组成的大环境。对象是什么?白一点说,「东
西」是也!任何实际的物体你都可以说它是对象。为了描述对象,我们应该先把对象的
属性描述出来。好,给「对象的属性」一个比较学术的名词,就是「类别」(class )。
对象的属性有两大成员,一是资料,一是行为。在对象导向的术语中,前者常被称为
property Java field method
( 语言则称之为 ),后者常被称为 。另有一双比较像程序设计
member variable data member member function
领域的术语,名为 (或 )和 。为求统一,本
member variable member function
书使用第二组术语,也就是 (成员变量)和 (成员函数)。
一般而言,成员变量通常由成员函数处理之。
如果我以CSquare 代表「四方形」这种类别,四方形有color,四方形可以displ ay 。好,
color 就是一种成员变量,displ ay 就是一种成员函数:
CSquare square; // 声明square 是一个四方形。
square。color = RED; // 设定成员变量。RED 代表一个颜色值。
square。display (); // 调用成员函数。
下面是C++ 语言对于CSquare 的描述:
class CSquare // 常常我们以C 作为类别名称的开头
{
private:
int m_color; // 通常我们以m_ 作为成员变量的名称开头
public:
void display () { 。。。 }
void setcolor (int color) { m_color = color; }
};
成员变量可以只在类别内被处理,也可以开放给外界处理。以资料封装的目的而言,自
56
…………………………………………………………Page 119……………………………………………………………
C++ pr ivate publ ic
然是前者较为妥当,但有时候也不得不开放。为此, 提供了 、 和
pr otected pr ivate
三种修饰词。一般而言成员变量尽量声明为 ,成员函数则通常声明为
publ ic m_color pr ivate