数学建模社区-数学中国

标题: c++语言程序设计教程! [打印本页]

作者: 韩冰    时间: 2004-11-21 00:37
标题: c++语言程序设计教程!
<>学习目标:</P>& H$ O) i0 ?: u3 E1 y& r' K! z
<>会用Visual C++6集成开发环境编写和调试程序。掌握C++语言的概念、语法规则和编程方法,理解结构化的程序设计和面向对象程序设计的基本思想,会用结构化的程序设计和面向对象的程序设计方法,开发简单的应用程序。</P>
作者: 韩冰    时间: 2004-11-21 00:37
C++是当今最流行的高级程序设计语言之一,应用十分广泛。它也是一门复杂的语言,与C语言兼容,既支持结构化的程序设计方法,也支持面向对象的程序设计方法。本课程并不企图涵盖C++语言的所有内容,而是介绍最基本的概念、语法规则和编程方法。本课程共分12章,分别是:引言、基本的数据类型、运算符和表达式、流程控制语句、函数、数组与字符串、指针与引用、结构与链表、编译预处理、类与对象、继承与多态和输入输出流。
作者: 韩冰    时间: 2004-11-21 00:39
<>词汇表:</P><><TABLE cellSpacing=0 cellPadding=0 width="100%" border=0><TR><TD>1. 保留字
. ?$ S, `  r' w4 C/ y3 h: L) J. |  C++中,保留字也称关键字,它是预先定义好的标识符。见关键字的解释。
: r/ ?  z- e1 V7 ]2 @# w" P* D" g2.关键字
2 n; O: B- {! K! {! A, z  C++中已经被系统定义为特殊含义的一类标识符。C++中的关键字有:
, g2 Y' g4 ^- d+ U: |) |$ l5 E( t, O<TABLE borderColor=#99cc00 cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width="100%" borderColorLight=#cccccc border=1><TR><TD><FONT face="Arial, Helvetica, sans-serif">auto</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">double</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">int</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">struct </FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">break </FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">else</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">long</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">switch</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">case</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">enum</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">register</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">typedef</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">char</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">extern</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">return</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">union</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">const</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">float</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">short</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">unsigned</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">continue</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">for</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">signed</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">void</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">default</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">goto</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">sizeof</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">volatile</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">do</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">if</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">static</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">while</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">asm</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">_cs</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">_ds</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">_es</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">_ss</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">cdecl</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">far</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">huge</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">interrupt</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">near</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">pascal</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">class</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">public</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">private</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">catch</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">protected</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">delete</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">new</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">template</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">friend</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">this</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">inline</FONT></TD></TR><TR><TD><FONT face="Arial, Helvetica, sans-serif">throw</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">try</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">operator</FONT></TD><TD><FONT face="Arial, Helvetica, sans-serif">virtual</FONT></TD><TD colSpan=2><FONT face="Arial, Helvetica, sans-serif">overload(现不用)</FONT></TD></TR></TABLE>3.标识符
- }9 u* \$ x2 R# w  对变量、函数、标号和其它各种用户自定义对象的命名。在C++中,标识符长度没有限制,第一个字符必须是字母或下划线,其后若有字符则必须为字母、数字或下划线。例如count2,_x是正确的标识符形式,而hello!,3th则是错误的。在C++中标识符区分大小写,另外标识符不能和C++中的关键字相同,也不能和函数同名。; E1 J6 `/ _1 H. c1 v1 p# Z* \
4.声明
0 }. g  i* y: S1 k$ c  将一个标识符引入一个作用域,此标识符必须指明类型,如果同时指定了它所代表的实体,则声明也是定义。
. r: c- P% S+ ?5.定义! x# @1 Z( v- W% a) |$ @7 m" e. w
  给所声明的标识符指定所代表的实体。3 N: N$ H; p2 D
6.变量
; i3 q" b. `1 i  C6 g  某个作用域范围内的命名对象。
/ }# f( E- m2 g2 y  f7 h4 D7.常量5 K5 \, S+ T4 I" m
  常量是不接受程序修改的固定值,可以是任意数据类型。可以用后缀准确的描述所期望的常量类型,如浮点类型常量在数字后加F,无符号整型常量加后缀U等等。此外还有串常量如"lease input year:",反斜线字符常量如\n表示回车符。
' T; H" i* j3 s1 Y* Z% y+ u8. const说明符
8 j/ @% B. W* ]: R  const是在变量声明或函数声明时所用到的一个修饰符,用它所修饰的实体具有只读属性。
" _5 B4 o1 _2 m: k9. 输入  `$ K2 U+ a- }
  当程序需要执行键盘输入时,可以使用抽取操作付"&gt;&gt;"从cin输入流中抽取字符。如:
! I9 D7 }; [2 i: l  int myAge;
; O+ d! B" ~% R  cin &gt;&gt; myAge;
/ Q/ ]- u7 }5 {. H/ w9 x10.输出: i4 T3 J+ V) G. D6 L
  当程序需要在屏幕上显示输出时,可以使用插入操作符"&lt;&lt;"向cout 输出流中插入字符。如:' O) L. T  P0 Y8 R
  cout &lt;&lt; "This is a program. \n ";5 f$ {+ b+ R) _, d/ W* G
11.流
4 k, S6 [1 [! m' L  流是既产生信息又消费信息的逻辑设备,通过C++系统和物理设备关联。C++的I/O系统是通过流操作的。有两种类型的流:文本流,二进制流。
$ M; @1 c, W2 f, |. l, g$ h12.标准输入输出库
  Z! ]& S4 D6 ?6 b/ l( ?  它是C++标准库的组成部分,为C++语言提供了输入输出的能力。
2 u2 y) l! q' [1 V13.内置数据类型
- n+ Q; `( _9 w  Q+ c  由C++直接提供的类型,包括int、float、double、char 、bool、指针、数组和引用。
# h' f, h7 f3 k; f# y8 P14.字符类型7 u7 B3 U: ~  P' f7 o9 l
  包括 char、signed char、unsigned char三种类型。
/ F( i/ T+ u0 o/ k- ]5 ~" l) `& j15.整数类型* k/ u8 u. [$ w4 x9 z, o
  包括 short、 int、long 三种类型。6 E+ d6 W: h5 k
16.long8 I. T1 n4 }9 f' M, z& r' w  L
  只能修饰 int , double." D; i) W( }1 q" c0 c7 N
  long int 指一种整数类型,它的长度大于等于int型.
3 _2 h4 x' M3 X; X: u" S* p, Z  long double 指长双精度类型,长度大于等于double型。 & l# s4 i( c! O0 T
17.short' J2 ]7 y$ }( c, @+ q& U
  一种长度少于或等于int型的整数类型。
! M; I6 W- P  O6 \6 Y0 Y18.signed  l. C7 [/ F; b' D, _3 p1 C
  由它所修饰的类型是带符号的. 只能修饰 int 和 char .
2 c+ Z; {5 J9 T3 m19.布尔型
) K9 l/ A4 l  [$ ]  一种数据类型,其值可为:true, false 两种。( l2 |0 l4 b/ C9 i  l
20.浮点类型
! x3 k  F% D* Y' o. X  包括float, double , long double 三种类型。其典型特征表现为有尾数或指数。  C. x9 {  v6 p* B: |6 o/ E1 [' U: ~2 o
21.双精度类型
) X; ~) j% Y% T  E# b  Z  浮点类型中的一种。在基本数据类型中它是精度最高,表示范围最大的一种数据类型。
$ l2 A  Q7 q; e* O  j; ^22.void类型
1 v7 t0 H* p' Q3 {  关键字之一,指示没有返回信息。
: F/ T) Y1 h9 C* U# _23.结构类型
' m/ d' L: n# I5 ^- N+ U  类的一种,其成员默认为public型。大多用作无成员函数的数据结构。
) {9 {! y' d9 Z+ Q% `3 E# j24.枚举类型4 A8 U, r3 O: f# ?+ e
  一种用户自定义类型,由用户定义的值的集合组成。/ `0 P% J% Q5 A9 N- _
25.类型转换
0 m  x! J2 _8 _+ i$ f+ Y' ]  一种数据类型转换为另一种,包括显式,隐式两种方式。" y" k  @( Z0 p- E$ r" y/ I
26.指针1 _% x, W5 K) l/ c  z
  一个保存地址或0的对象。 7 S  f! f# K9 |. t# H7 |0 u. q' @& F
27. 函数指针/ Q" @0 |6 Z( |: _1 @! }
  每个函数都有地址,指向函数地址的指针称为函数指针,函数指针指向代码区中的某个函数,通过函数指针可以调用相应的函数。其定义形式为:0 c" a5 K) @" B
  int ( * func ) ( char a, char b);
7 j( i( z- _) ^* e7 t" B+ D. ?' o! d28.引用" S# I/ j  m% T" c4 }2 T1 C# P
  为一个对象或函数提供的另一个名字。
, t: ~8 r0 C) `3 i6 v9 o6 A1 _6 H29.链表
' |9 s6 q% q6 g' q; Q0 M  一种数据结构,由一个个有序的结点组成,每个结点都是相同类型的结构,每个结点都有一个指针成员指向下一个结点。9 Q8 m2 ]* s* m1 U6 d
30.数组
/ k8 g5 Q* u6 t  数组是一个由若干同类型变量组成的集合。+ D6 a( O; z+ z8 {! H
31.字符串
# m+ q& H+ T4 i) ?2 T4 Z5 u5 C  标准库中的一种数据类型,一些常用操作符如+=,==支持其操作。/ e* k/ z+ g+ X9 i" ]+ G- d
32.运算符
2 k( c* u+ \* g; K  内置的操作常用符号,例如+,* ,&amp; 等。# z5 {% E  V9 C
33.单目运算符
/ n6 V% v) ?! Q/ f* y  只能对一个操作数进行操作1 G) h- Q6 G- o1 W7 I6 \/ A4 U
34.双目运算符1 Q4 Q, C7 B: U( U* {; z: c. N
  可对两个操作数进行操作
% _) H& L  B8 X- F4 |35.三目运算符: @( |1 A1 q8 c( H6 f9 x
  可对三个操作数进行操作 ; ^. ^) r; l( x7 ^. t
36.算术运算符) O! N' x% `; W& K1 h8 h$ c+ B6 g; k5 D
  执行算术操作的运算符,包括:+,-,*,/,%。4 l! `) ?% \9 Y" N# {
37.条件运算符
4 [2 s2 p  r3 `6 G+ P/ p) `! J  即"?: " 。
6 O5 n7 M1 ~3 M. i  其语法为:
+ y9 Q% H! s  s% R) g' t: \  (条件表达式)?(条件为真时的表达式):(条件为假时的表达式)) L( v6 A( D, i/ X& C" _0 w$ D% o( `
  如:x = a &lt; b ? a : b;; e3 \! L, ~* U( b* Q2 f
  相当于:
% D) u5 R0 p8 x  if ( a &lt; b) * ^% f4 p+ u/ ^  R$ q
  x = a;5 C/ T4 h+ H& ]6 w6 ~
  else
2 M3 P4 V+ q' k% V1 F! l- E  x = b;
/ ^# `. ~' l. G38.赋值运算符$ q( S; R9 W! Q$ E2 G1 M
  即:" = "及其扩展赋值运算符* I, |. W8 n: m) ~5 M% _! g
39.左值1 U7 k* [- H' S! M$ ^
  能出现在赋值表达式左边的表达式。
1 z# z5 c# j6 T" M9 R3 U40.右值# S! h9 ^) f6 n1 y
  能出现在赋值表达式右边的表达式。+ n2 a% N/ s0 S! {+ g) z
41.运算符的结合性
9 p9 ?. d, @0 G+ d# K! h$ D  指表达式中出现同等优先级的操作符时该先做哪个的规定。+ B/ N: m' J% o- o. n5 K3 i
42.位运算符
" f' F2 i- K& t4 W7 `, G3 t  " &amp; "," | " , " ^ "," &gt;&gt; "," &lt;&lt; "2 c9 e! u" h; {
43.逗号运算符9 |! a, }: m/ i4 t8 s- f" ]& J, q
  即" , "
: v/ K8 z/ b5 i! U0 L" D44.逻辑运算符
& F- ~$ {0 \- N& n$ I8 `( C  " &amp;&amp; ", " || " ," ! "
# l" g# [, h6 z( ?' U0 l0 O45.关系运算符7 ]/ ]! s# {) E0 |0 ^9 z. D
  "&gt;","&gt;=","&lt;=","&lt; "," &lt;= ","== "/ `* f+ I3 W4 {  R7 Q* P9 Q
46.new运算符. M6 [$ e  v1 M) P0 ~. [& X
  对象创建的操作符。
+ d! i  V, S, D* m. L& u47.delete运算符1 t+ F0 P' O! w' O+ _; s' ^
  对象释放操作符,触发析构函数。
1 F* v, S$ b2 E: {* J; r( q$ s48.内存泄露
3 R) I9 x$ e7 |1 d9 ^/ r  ^- [  操作堆内存时,如果分配了内存,就有责任回收它,否则这块内存就无法重新使用,称为内存泄漏。1 u6 L4 x6 S( p0 p3 {
49.sizeof运算符
; q* f% `7 {/ {2 B+ P9 V5 U6 A  获得对象在内存中的长度,以字节为单位。$ j/ I. c' J7 o
50.表达式. y# N8 s, ^7 i
  由操作符和标识符组合而成,产生一个新的值。, q: U3 `1 L( u2 }
51.算术表达式
/ a6 \) E. z& I% d  用算术运算符和括号将运算对象(也称操作数)连接起来,符合C++语法规则的式子。/ h' }3 ^  G! s7 U# S
52.关系表达式
* c, M# i# V7 N: D) n+ B6 e9 Y  用关系运算符和括号将运算对象(也称操作数)连接起来,符合C++语法规则的式子。0 l; t. M5 Q* \* z# u+ F
53.逻辑表达式
9 t7 w- S8 h2 z+ W# v2 t9 n% I; S  用逻辑运算符和括号将运算对象(也称操作数)连接起来,符合C++语法规则的式子。
7 [$ K5 E' g. h& {2 Z7 p/ p54.赋值表达式
* k! n; r* |/ K+ C* ~; E) y  由赋值运算符将一个变量和一个表达式连接起来,符合C++语法规则的式子。. d0 ]" p- K! _* T5 F) i
55.逗号表达式
. W1 h+ F! X( S/ a) ]! ?; e  由逗号操作符将几个表达式连接起来,符合C++语法规则的式子。
1 T* M$ d& F6 ?9 `% U56.条件表达式4 Y7 Q- F, S  k' N% \# S
  由条件运算符将运算对象连接起来,符合C++语法规则的式子。
( Z* [5 a- Y$ M! L; O" b57.语句1 n$ N! r! ~/ |
  在函数中控制程序流程执行的基本单位,如if语句,while语句,switch语句, do语句, 表达式语句等。1 E: p2 W4 }# r# g8 p
58.复合语句, \/ S) B6 g5 x; C& n) A
  封闭于大括号{}内的语句序列。8 V- Y7 ^1 O0 Y+ i' u2 K# b& z2 e
59.循环语句
! b$ o' C, U# b0 u  for 语句, while 语句, do 语句三种。
/ J5 L6 `; S8 e: T3 R) U2 H60.条件语句. E: W2 B2 Z4 k8 Q& _: r9 o
  基于某一条件在两个选项中选择其一的语句称为条件语句。* R- \3 L" e& x+ S
61.成员函数& E- V# l/ D6 @1 k. Y) k
  在类中说明的函数称为成员函数。" m/ P  C% r5 `% n( Q
62.全局函数
% {" @* C* n- j  p  定义在所有类之外的函数。$ _* \7 V+ T! H8 W/ o
63.main函数
: h& G* }2 c! S( U8 y, a; x  由系统自动调用开始执行C++程序的第一个函数 & |% @$ h+ r' {
64.外部函数2 f. h; |$ l" K
  在定义函数时,如果冠以关键字extern,表示此函数是外部函数。8 \: D9 C8 H0 |( e2 Q- \
65.内联函数
/ w. O5 ~2 w* j) b  在函数前加上关键字inline说明了一个内联函数,这使一个函数在程序行里进行代码扩展而不被调用。这样的好处是减少了函数调用的开销,产生较快的执行速度。但是由于重复编码会产生较长代码,所以内联函数通常都非常小。如果一个函数在类说明中定义,则将自动转换成内联函数而无需用inline说明。
% _* K8 d- S2 p- L5 w66.函数重载- [! t. [1 f- g1 s
  在同一作用域范围内,相同的函数名通过不同的参数类型或参数个数可以定义几个函数,编译时编译器能够识别实参的个数和类型来决定该调用哪个具体函数。需要注意的是,如果两个函数仅仅返回类型不同,则编译时将会出错,因为返回类型不足以提供足够的信息以使编译程序判断该使用哪个函数。所以函数重载时必须是参数类型或者数量不同。
. E) A7 I/ i+ Z; b. l7 G67.函数覆盖
4 P  h* e  _  Q  对基类中的虚函数,派生类以相同的函数名及参数重新实现之。' g! P# c# i) O/ x, B. m: C) K
68.函数声明
2 k1 E# Y9 C& N, l  在C++中,函数声明就是函数原型,它是一条程序语句,即它必须以分号结束。它有函数返回类型,函数名和参数构成,形式为:
/ `( t9 ^! d! X2 B/ {  L2 s  返回类型 function (参数表);6 ^" `* e$ u% n3 p' D1 E$ H# K
参数表包含所有参数的数据类型,参数之间用逗号分开。如下函数声明都是合法的。
/ ^4 c0 l# K! W+ r3 W  int Area(int length , int width ) ;
. z& b$ Z: N& h5 @1 {6 T或 int Area ( int , int ) ;
$ a9 X$ S" b( `6 _8 s1 p69.函数定义
6 W( b/ m$ Z/ W+ `% ^) C% F; l  函数定义与函数声明相对应,指函数的具体实现,即包括函数体。如:
: D4 h4 K! L4 \, q5 {3 i  int Area( int length , int width )
. W& L% a# a2 f* q  {1 ]5 g4 k- E1 ]" s- ^5 l
   // other program statement  m: H1 q! p- F
  }
$ ^8 `& R# e( z: `70.函数调用5 N/ B' q$ ^8 N6 }
  指定被调用函数的名字和调用函数所需的信息(参数)。; C4 q4 m! K( f5 e
71.函数名5 y# V/ C9 C/ r2 e( E
  与函数体相对,函数调用时引用之
& |3 j& i9 Y7 |% [7 y0 t72.函数类型* Z; h( i' v9 d5 r0 r) C! V
  (1) 获取函数并返回值。2 D4 i- `" L9 w# z  J! o& `
  (2) 获取函数但不返回值。
0 N% k& H; {. q6 p: _" R8 A8 [& F  (3) 没有获取参数但返回值。
0 D& G( w' Y  h7 \0 f3 x  (4) 没有获取参数也不返回值。
" O( _) f8 i- s- o3 A/ ]% d73.形式参数
, R; a' N3 m* Y% B7 q6 f  函数中需要使用变元时,将在函数定义时说明需要接受的变元,这些变元称为形式参数。形式参数对应于函数定义时的参数说明。其使用与局部变量类似。
* \" {% S7 x. r$ Y9 r$ O2 r+ l) P74.实际参数; b; r5 f% a; L$ m$ B2 e! O
  当需要调用函数时,对应该函数需要的变元所给出的数据称为实际参数。. }" B  ?: v$ K0 x
75.值传递# W" X: g3 N+ Y& Q% R4 t
  函数调用时形参仅得到实参的值,调用结果不会改变实参的值。4 h4 p) [2 }$ g7 @: J  j
76.引用传递$ D8 o/ u% a  R1 z8 N% ]
  函数调用时形参为实参的引用,调用结果会改变实参的值。
/ V7 x  n$ t( N+ z77.递归
9 b0 a6 [. u2 y- z/ u  函数的自我调用称为递归。每次调用是应该有不同的参数,这样递归才能终止。* e9 j% E' e  w0 A
78.函数体, ?" @2 n, B$ k. \4 n
  与函数名相对,指函数最外边由{}括起来的部分。0 k6 J+ H4 ]( w0 Z6 ~
79.作用域' U& v( B; i0 I9 t
  指标识符在程序中有效的范围,与声明位置有关,作用域开始于标识符的生命处。分:局部作用域,函数作用域,函数原型作用域,文件作用域,类作用域。
! A/ [  ?9 D1 c4 O& }80.局部作用域% @$ ?) C1 U3 {% M
  当标识符的声明出现在由一对花括号所括起来的一段程序内时,该标示符的作用域从声明点开始到块结束处为止,此作用域的范围具有局部性。
7 U. h0 m: s" r! X7 \81.全局作用域
/ d8 w* N% l5 T: B% B6 D1 _  标识符的声明出现在函数,类之外,具有全局性。9 o+ [* V* `) I& ^8 _: @! v) Q
82.类作用域
, z- Y2 i2 J3 c, ?4 t9 N, x3 ]( I; S9 |  指类定义和相应的成员函数定义范围。
( u6 G5 {9 [( Y" c# o2 Z- u83.全局变量
* a- @/ ?% M. F0 V  定义在任何函数之外,可以被任一模块使用,在整个程序执行期间保持有效。当几个函数要共享同一数据时全局变量将十分有效,但是使用全局变量是有一定弊端的:全局变量将在整个程序执行期间占有执行空间,即使它只在少数时间被用到;大量使用全局变量将导致程序混乱,特别是在程序较复杂时可能引起错误。
0 V% Z* |. ]: ~* s3 I0 E8 B84.局部变量# G7 ^7 y0 |% ]5 n
  定义在函数内部的变量。局部变量只在定义它的模块内部起作用,当该段代码结束,这个变量就不存在了。也就是说一个局部变量的生命期就是它所在的代码块的执行期,而当这段代码再次被执行时该局部变量将重新被初始化而不会保持上一次的值。需要注意的是,如果主程序和它的一个函数有重名的变量,当函数被调用时这个变量名只代表当前函数中的变量,而不会影响主程序中的同名变量。
  h. r! R0 b! j: i% U' [$ h# |. ]85.自动变量
* O7 m) A2 H6 |, M1 k  由auto修饰,动态分配存储空间,存储在动态存储区中,对他们分配和释放存储空间的工作是由编译系统自动处理的。, I+ G' m) s) O* d; I
86.寄存器变量
5 X! a, m% D3 \9 A8 B  存储在运算器中的寄存器里的变量,可提高执行效率。& |7 J" s. i' P8 }5 e6 J- |0 ]
87.静态变量$ z5 Y$ ]5 D2 D  L2 k0 j; g9 ~& P
  由连接器分配在静态内存中的变量。
5 g  K/ S# S% K  s  J88.类0 W( K7 u% f6 ^3 e5 }7 C; Z
  一种用户自定义类型,有成员数据,成员函数,成员常量,成员类型组成。类是描叙C++概念的三个基本机制之一。9 v2 n5 ?5 l" m+ {. j
89.外部变量
9 q8 W2 z2 @5 {  由extern修饰的变量
/ y( d- |1 _2 V$ S90.堆
5 c6 @3 m7 _8 f& p: s  即自由存储区,new 和delete 都是在这里分配和释放内存块。# s5 @' U% Z4 V! O8 Y3 G
91.栈; ^' \( k% |  a7 I4 Z. J" q+ n
  有两个含义:(1)指内存中为函数维护局部变量的区域。(2)指先进后处的序列。
  b& @: `* y3 s; p6 h6 s4 c92.抽象类
! y' S% B$ ^' h7 _; y5 [  至少包含一个纯虚函数的类。抽象类不能创建对象,但可以创建指向抽象类的指针,多态机制将根据基类指针选择相应的虚函数。
0 Q% V' c! U( C0 O7 }9 n93.嵌套类, ^1 W% }; k0 B' ~- A$ C
  在一个类里可以定义另一个类,被嵌入类只在定义它的类的作用域里有效。
* D; A4 p' s5 F" q94.局部类
. D# \$ U3 ^( O  在函数中定义的类。注意在函数外这个局部类是不可知的。由于局部类的说明有很多限制,所以并不常见。
- ?7 A$ B0 G1 ?: H) |, p+ n  L9 _! G: s95.基类
- s0 w" g7 N9 G  a- D& A3 n, X  被继承的类称为基类,又称父类、超类或范化类。它是一些共有特性的集合,可以有其它类继承它,这些类只增加它们独有的特性。
- m7 N/ g0 ?* S4 G; B$ u8 Q96.派生类
9 ?. P7 _# l% O4 z  继承的类称为派生类。派生类可以用来作为另一个派生类的基类,实现多重继承。一个派生类也可以有两个或两个以上的基类。定义时在类名后加":被继承类名"即可。) D; F1 ~. A! f) K; Y
97.父类
# Y! }; \; f) O# I5 c  \  即基类。见95基类的解释。2 }9 Z2 s7 {' j% P: o3 X  B. V  M
98.子类* K( p& o2 [7 o. t4 @3 v
  即派生类。见96派生类的解释。
( p9 `4 K% M  J' d1 X. ^99.对象( y. k6 j" U- H; K& I) S0 O
  有两重含义:% a& W3 h6 u7 e$ s- W$ Z' |
  1. 内存中含有某种数据类型值的邻近的区域。% V6 w- ?. t: }6 Y3 M8 b  W
  2. 某种数据类型的命名的或未命名的变量。一个拥有构造函数的类型对象在构造函数完成构造之前不能认为是一个对象,在析构函数完成析构以后也不再认为它是一个对象。
3 ~9 [& ?2 {4 A100. 数据成员, Q% w$ S* ~- `0 J3 K- p& |5 V
  指类中存储数据的变量。
- [9 s" ~2 Y& Y/ y* J4 q2 P3 A101.实例化9 @6 f. _: _% ]$ i
  即建立类的一个对象。' X/ r+ B# O9 C7 g; @
102.构造函数2 q+ l$ {8 N# f8 }
  是一个类的实例的初始化函数,将在生成类的实例时被自动调用,用于完成预先的初始化工作。一个类可以有几个构造函数,以不同的参数来区别,即构造函数可以被重载,以便不同的情况下产生不同的初始化;也可以没有构造函数,此时系统将调用缺省的空构造函数。需要注意的是构造函数没有返回类型。% G8 Y6 _1 w! [6 ]+ S
103.成员初始化表1 [' ^% G  ^$ K# j, R5 c, R8 j: V( K
  成员初始化表可用于初始化类中的任何数据成员,放在构造函数头与构造函数体之间,用":"与构造函数头分开,被初始化的数据成员的值出现在一对括弧之间,它们之间用逗号分开。
! D: |# S! I* ~7 C0 ]4 @104.析构函数3 E. E( R2 s/ E6 K0 }3 u- p
  是一个类的实例的回收函数,将在该实例结束使用前被自动调用,用于完成资源的释放。一个类只可以有一个析构函数,当析构函数执行后,该实例将不复存在。析构函数同样没有返回值。4 H5 H; m7 @* H/ `* d
105.虚析构函数
6 v0 N% V5 ^, a: V, W$ f  由virtual 修饰的析构函数,当用基类指针释放派生类对象时可根据它所指向的派生类对象释放准确的对象。: c, ]4 A: Z3 @0 A
106.继承+ @& M3 w) E4 T3 E+ h( u3 a5 s( j
  面向对象的程序设计语言的特点之一。即一个对象获得另一个对象的特性的过程。如将公共属性和服务放到基类中,而它的各派生类除了有各自的特有属性和服务外还可以共享基类的公共属性和服务。这样的好处是容易建立体系,增强代码重复性。6 a" `9 F" O# ~) E) I6 q
107.单继承
. j/ S. c8 B2 [* Y8 ^' ?  一个派生类只有一个基类,成为单继承。, y6 R9 O( o$ y  {, f9 m/ Z
108.重继承
' _8 Z! p0 W1 V9 z  一个派生类拥有多个基类,成为多继承。" i7 Z) H% v5 W
109.虚函数' O: X3 M& n5 S$ a1 \+ ^+ ]
  在基类中说明为virtual并在派生类中重定义的函数。重定义将忽略基类中的函数定义,指明了函数执行的实际操作。当一个基类指针指向包含虚函数的派生对象时,C++将根据指针指向的对象类型来决定调用哪一个函数,实现了运行时的多态性。这里的重定义类似于函数重载,不同的是重定义的虚函数的原型必须和基类中指定的函数原型完全匹配。构造函数不能是虚函数,而析构函数则可以是。
7 a. ?; e8 U; |7 p110.纯虚函数. [! B, H2 N3 \, R$ b
  在基类中只有声明没有实现的虚函数。形式为:
, J0 S' S7 k0 f+ ]4 E1 H' C2 l  virtual type funname(paralist)=0。这时基函数只提供派生类使用的接口,任何类要使用必须给出自己的定义。8 y. f3 h' H3 A. r) S& O
111.多态性. A% z2 ]' O8 c/ M& b  t2 N
  给不同类型的实体提供单一接口。虚函数通过基类接口实现动态多态性,重载函数和模板提供了静态多态性。; S8 t( `! G; \  [) n; m; `# q) f
112.复制构造函数
1 G5 S# k" b) b7 C* N) A3 s5 f  以自身类对象为参数的构造函数,如Z::Z(const Z&amp;). 用在同类对象间进行初始化。
( `8 `& K( R; R( D+ y113.运算符重载) X% L" P8 c& r# Y# i
  C++中可以重载双目(如+,×等)和单目(如++)操作符,这样可以使用户像使用基本数据类型那样对自定义类型(类)的变量进行操作,增强了程序的可读性。当一个运算符被重载后,它将具有和某个类相关的含义,同时仍将保持原有含义。: n% J% u5 {( w4 y9 _6 j
114.静态成员函数
$ Y4 c1 E1 B0 P2 w$ c  成员函数通过前面加static说明为静态的,但是静态成员函数只能存取类的其他静态成员,而且没有this指针。静态成员函数可以用来在创建对象前预初始化专有的静态数据。3 |9 ]. L4 t, [- h! t/ o1 l
115.静态成员变量7 Y7 j3 h( G. ?% J$ g/ T1 @
  在成员变量之前加static关键字将使该变量称为静态成员变量,该类所有的对象将共享这个变量的同一拷贝。当对象创建时,所有静态变量只能被初始化为0。使用静态成员变量可以取代全局变量,因为全局变量是违背面向对象的程序设计的封装性的。
8 ]% J; e. s- }) X* f! u; X116.私有成员
( ^, q  G* V& o! h! P! E" L3 c* Z  只能由自身类访问的成员。
9 L- t# s9 \4 R# x" j* d117.保护成员
3 u8 \9 w6 {: ]3 g+ t2 N  只能由自身类及其派生类访问的成员。
8 l# O' p4 P5 @% L+ G118.友元
9 _. X- K! `! }' M, z' o( m# R  被某类明确授权可访问其成员的函数和类。! \2 W( |  l; X
119.友元函数
1 y& Z# b, Q& |3 S, L; l, `  在函数前加上关键字friend即说明了一个友元函数,友元函数可以存取类的所有私有和保护成员。友元在重载运算符时有时是很有用的。
0 F+ K! d4 Z3 V% \! A/ j, T9 B/ e, I120.友元类
7 i, _$ h  R8 P* }2 P# ^) I4 S2 b; D  被某类明确授权可访问其成员的类1 `( Z; v# y' x4 h7 e0 g
121.例外处理0 U- \  S+ _: v% T
  报告局部无法处理某错误的基本方式。由try., throw , catch组成。  M9 A' x- i! D" _
122.文件  u- b3 A9 w# J+ u1 Q
  是用于从磁盘文件到终端或打印机的任何东西。流通过完成打开操作与某文件建立联系。
* T: W' D6 g9 r</TD></TR></TABLE></P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5