c++重点难点复习题及答案.pdf
1、数据共享与保护一、选择题:1、在下面存储类中,C )对象的可见性与生存期不一致。A.外部类 B.2、在下面存储类中,(AA.外 部 静 态 类 B.自动类 C.内部静态类)的对象不是局部变量。自动类 C.函数形参D.寄存器类D.寄存器类3、关于局部变量,下面说法正确的是(C )。A.定义该变量的程序文件中的函数都可以访问B.定义该变量的函数中的定义处以下的任何语句都可以访问C.定义该变量的复合语句中的定义处以下的任何语句都可以访问D.定义该变量的函数中的定义处以上的任何语句都可以访问4、一个类的静态数据成员所表示属性(C )。A.是类的或对象的属性 B.只是对象的属性C.只是类的属性 D.类和友元的属性5、类的静态成员的访问控制(D )。A.只允许被定义为priva teB.只允许被定义为priva te 或 prote c te dC.只允许被定义为publicD.可允许被定义为 priva te、prote c te d 或 public6、静态成员函数对类的数据成员访问(B )。A.是不允许的 B.只允许是静态数据成员C.只允许是非静态数据成员 D.可允许是静态数据成员或非静态数据成员7、被非静态成员函数访问的类的数据成员(A )。A.可以是非静态数据成员或静态数据成员数据成员C.只能是类的非静态数据成员B.不可能是类的静态D.只能是类的静态数据成员8、静态数据成员的初始化是在(D )中进行的。A.构造函数 B.任何成员函数C.所属类 D.全局区9、当将一个类A或函数f()说明为另一个类B的友元后,类 A 或函数f()能够直接访问类B的(D )。A.只能是公有成员 B.只能是保护成员C.只能是除私有成员之外的任何成员 D.具有任何权限的成员1 0、引入友元的主要目的是为了(C )。A.增强数据安全性 B.提高程序的可靠性C.提高程序的效率和灵活性 D.保证类的封装性1 1、一个类的成员函数也可以成为另一个类的友无函数,这时的友元说明(A )。A.需加上类域的限定C.类域的限定可加可不加二、判断题B.不需加上类域的限定D.不需要任何限定1、类的静态数据成员需要在定义每个类的对象时进行初始化。F2、当将个类S定义为另一-个类A的友元类时,类 S的所有成员函数都可以直接访问类A的所有成员。T3、静态数据成员必须在类外定义和初始化。T4、静态成员函数可以引用属于该类的任何函数成员F。5、友元函数是在类声明中由关键字f rie nd 修饰说明的类的成员函数。F6、友元函数访问对象中的成员可以不通过对象名F三、填空题:1、若“d ouble x=1 0 0;”是文件F 1.C P P 中的一个全局变量定义语句,若文件 F 2.C P P 中的某个函数需要访问此x,则应在文件F 2.C P P 中添加对x 的声明语句为 E xte rn d ouble x;2、如果一个函数定义中使用了 sia lic 修饰,则该函数不允许被其它文件中的函数调用。3、定义外部变量时,不用存储类说明符E xte rn,而声明外部变量时用它。4、调用系统函数时,要先使用#inc lud e 命令包含该系统函数的原型语句所在的头文件。5、C+程序运行时的内存空间可以分成全局数据区,堆区,栈区和代码区。6、局部变量具有局部生存期,存放在内存的栈区中。7、对类中对象成员的初始化是通过在构造函数中给出的初始化表来实现的。8、对类中常量成员的初始化是通过在构造函数中给出的初始化表来实现的。9、对类中引用成员的初始化只能通过在构造函数中给出的初始化表来实现。1 0、对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通过构造函数中的函数体来实现。1 1、假定要把a a 定义为A B 类中的一个常量整数型数据成员,则定义语句c o n s t i n t a a01 2、假定要把a a 定义为A B 类中的一个引用整数型数据成员,则定义语句为i n t&a a。1 3、假定A B 类中只包含一个整型数据成员a,并且它是一个常量成员,若利用参数a a 对其进行初始化,则该类的构造函数的定义为A B (i n t a a)a=a a;1 4、假定A B 类中只包含一个整型数据成员a,并且它是一个引用成员,若利用 引 用 参 数 aa对 其 进行初始化,则 该 类 的 构 造 函 数 的 定 义 为 A B(i n t&a a)a=a a;。1 5、静态成员函数能够直接访问类的静态数据成员,只能通过对象名访问类的非静态数据成员。1 6、静态数据成员必须在所有函数的定义体外进行邈 电。1 7、一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上类域的限定。四、修改程序题:下列程序段中,A _ c l a s s 的成员函数V a r i a n c e。可求出两数的平方差,请改写该程序段,把 V a r i a n c e。函数从A _ c l a s s 类中分离出来,用友元函数来实现该函数的功能。c l a s s A _ c l a s s p r i v a t e:i n t x,y,t;p u bl i c:A c l a s s (i n t i,i n t j):x (i),y (j)i f(y x)t=x;x=y;y=t;)i n t V a r i a n c e()r e t u r n x*x-y*y;其它函数从略;v o i d m a i n ()A c l a s s A o bj (3,5);c o u t/R e s u l t :z/A _ o bj.V a r i a n c e ()x)t=x;x=y;y=t;)f r i e n d i n t V a r i a n c e();其它函数从略;i n t v a r i a n c e ()r e t u r n x*x-y*y;v o i d m a i n()A _ c l a s s A _ o bj (3,5);c o u t z/R e s u l t :z,A _ o bj.V a r i a n c e ()e n d l;2、数组、指针与字符串、1、在下面的一维数组定义中,哪一个有语法错误。(C)A.i n t a =l,2,3;B.i n t a 1 0 =0;C.i n t a ;D.i n t a 5 ;2、在下面的字符数组定义中,哪一个有语法错误。(D)oA.c h a r a 2 0 =a bc d e f g ;B.c h a r a=x+y=5 5.C.c h a r a 1 5 ;D.c h a r a 1 0=,5,;3、在下面的二维数组定义中,正确的是(C)。A.i n t a 5 ;B.i n t a 5 ;C.i n t a 3 =1,3,5,2;D.i n t a (1 0);4、假定一个二维数组的定义语句为“int a3 4=3,4,2,8,6;,则元素的值为(C),A.2 B.4 C.6 D.85,假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素的值为(A)oA.0 B.4 C.8 D.66、若定义了函数double*function0,则函数function的返回值为(B)。A.实数型 B.实数的地址 C.指向函数的指针 D.函数的地址7、以下函数的返回结果是(A)。int function(char*x)char*p=x;while(*p+);return(p-x-1);A.求字符串的长度 B.将字符串x连接到字符串p后面C.将字符串x 复制到字符串p 中 D.将字符串x 反向存放8、设有如下函数定义int f(char*s)char*p=s;while(*p!=,0)p+;return(p-s);在主函数中用cout f(good”)调用上述函数,则输出结果为(B)A.3 B.4 C.5 D.69、假定变量m 定义为“int m=7;,则定义变量p 的正确语句为(B)。A.int p=&m;B.int*p=&m;C.int&p=*m;D.int*p=m;10、变量s 的定义为char*s=Hello w o r l d!,要使变量p 指向s 所指向的同一个字符串,则应选取(A)。A.char*p=s;B.char*p=&s;C.char*p;p=*s;D.char*p;p=&s11、关于void指针,下列说法正确的是(C)。A.void指针就是未指向任何数据的指针B.void指针就是已定义而未初始化的指针C.指向任何类型数据的指针可直接赋值给一个void指针D.void指针值可直接赋给一个非void指针12、假定一条定义语句为“int a10,x,*pa=a;,若要把数组a 中下标为3的元素值赋给x,则不正确的语句为(D)。A.x=pa3;B.x=*(a+3);C.x=a3;D.x=*pa+3;13、假定有定义“int b10;int*pb;,则不正确的赋值语句为(D)。A.pb=b;B.pb=&b0;C.*pb=new int;D.pb=b5;14、假定p 是具有double类型的指针变量,则表达式+p使 p 的 值(以字节为单位)增 加(C)。A.1 B.4 C.sizeof(double)D.sizeof(p)15、假定p 指向的字符串为 string,则 cout p+3的输出结果为(C)。A.s t r i n g B.r i n g C.i n g D.i1 6、假定p 指向的字符串为”s t r i n g,若要输出这个字符串的地址值,则使用(D).A.c o u t *s;B.c o u t s;C.c o u t n e x t 和 e le m He a d D.e le m Ta i l-n e x t 和 e le m Ta i l26、在一个用链表实现的队列类中,假定每个结点包含的值域用e le m 表示,包含的指针域用n e x t 表示,链队的队首指针用e le m He a d 表示,队尾指针用e le m Ta i l表示,若链队为空,则进行插入时必须把新结点的地址赋给(C)。A.e le m He a d B.e le m Ta i 1C.e le m He a d 和 e le m Ta i l D.e le m He a d 或 e le m Ta i l27、当类中的一个整型指针成员指向一块具有n*s i ze o f (i n t)大小的存储空间时.,它最多能够存储(A )个整数。A.n B.n+128、假定A B 为一个类,则执行A.动态分配一个数组C.静态分配一个数组C.n-1 D.1“A B *p x=n e w A B n ;”语句时将(AB.动态分配一个对象D.静态分配一个对象29、设 p x 是指向一个类对象的指针变量,则 执 行“d e le t e p x;”语句时,将自动调用该类的(C )A.无参构造函数 B.带参构造函数 C.析构函数 D.拷贝构造函数30、当一个类对象离开它的作用域时,系统自动调用该类的(D )。A.无参构造函数 B.带参构造函数 C.拷贝构造函数D.析构函数31、假定一个类对象数组为A n ,当离开它定义的作用域时,系统白动调用该类析构函数的次数为(C )。A.0 B.1C.n D.n-132、假定A B 为一个类,则执行次数为(D )。“A B 语句时调用该类无参构造函数的A.0 B.1C.9 D.1033、假定A B 为一个类,则执行造函数的次数为(A )。“A B *p x=n e w A B n ;”语句时调用该类无参构A.n B.34、假定A B 为一个类,数的次数为(A )。A.2 B.n-1 C.1则 执 行“A B a,3 C.4D.0b (3),*p;”语句时共调用该类构造函D.535、假定A B 为一个类,则执行构造函数的次数为(B )。“A B a ,b 3,*p4 语句时共调用该类A.3 B.4 C.536、假定A B 为一个类,则执行“A B a,类无参构造函数的次数为(D )A.5 B.6 C.3D.9b(2),c 3,*p=&a;语句时共调用该D.437、假定A B 为一个类,则执行A B *p=n e w A B(1,2);”语句时共调用该类构造函数的次数为(B )。A.0 B.1 C.2 D.338、假定A B 为一个类,p x 为指向该类的一个含有n 个对象的动态数组的指针,则执行“d e le t e p x;”语句时共调用该类析构函数的次数为(C )。A.0 B.1 C.n D.n+1二、填空题:1、用于存储一个长度为n的字符串的字符数组的长度至少为_ n+l _ _ _ _ _ _。2、若 a是一个字符数组,则从键盘上向该数组输入一个字符金的表达式为_ g e t li n e(c i n,a);。3、若 a是一个字符数组,则向屏幕输出a中所存字符串的表达式为_ c o u t a _ _ _ _ _ _ _。4、一个二维字符数组a 10 20 能够存储1 0 _ _ _ _ _ 个字符串,每个字符串的长度至多为_ 19_ _ _ _ _ _。5、对一个二维字符薮组a 进行初始化的数据为“123“,“456“,“78 9”,则 a l 元 素 对 应 的 字 符 串 为 456。6、s t r le n(a p p le)的值为_ 5,s t r c m p (a,A)的值为。7、假定对数组a 口进行初始化的数据为 2,7,9,6,5,7,10 ,则 a 和 a 5分别被初始化为_ _ 9_ _ _ _ _ _ 和_ _ _ 7 _ _ _ _。8、假定对二维数组a 3 4 进行初始化的数据为 3,5,6,2,8 ,7 ,则和 a 2 3 分别被初始化为_ 8 和_ 0 _ _。9、若二维数组a 有 m歹!设 a 0 0 位于数组的第一个位置上,则计算任一元素a i j 在数组中位置序号的公式为_i*m+j+l。10、若有定义“d o u b le a 3 5;w,则 a数组中行下标和列下标的最大值分别为_ _ 2_ _ _ _ 和 _4_ _ _ _ _-11、一个指针类型的对象占用内存的_ _ 4 _ _ _ _个字节的存储空间。12、一个指针指向一个数据对象,它保存着该数据对象的一地址 若数据对象为D a t a Ty p e 类型,则相应的指针类型为_ _Datatype*。13、若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为_(c h a r*)p。14、假定一个数据对象为i n t*类型,则指向该对象的指针类型为_ i n t*_ _ _ _ _ _ 1151 假定P 是一个指向整数对象的指针,则 用.*P 表示该整数对象,用_ _ _ _ P_表示指针变量P 的地址。16、假定p 是个指针,则*p+运算首先访问_*p _,婶 使 p _ 的值增1,17、假 定 p是一个指针,则(*2+运算首先访问一*p_,然后使_*p的值增lo18、假 定 p所指对象的值为25,p+1所指对象的值为4 2,则*p+的值为_25_ 19、假 定 p所指对象的值为25,p+1所指对象的值为4 2,则*+p 的值为_ 42_ _ _ _ _ _。20、假定p 所指对象的值为25,p+1所指对象的值为42,则执行(*p)+运算后,P 所指对象的值为一 26_ _ _ _。21、艇p 所指对象的值为25,p+1所指对象的值为42,则执j:*(p+)或*p+运算后,P 所指对象的值为 42_ _ _ _。22、假定a 是一个一维指针数组,则 a+i 所指对象的地址比a 大_4*i字节。23、假定a 是一个一维数组,则 a i 的指针访问方式为_*(a+i)_ _ _ _ _ _。24、假 定 a是一个一维数组,则 a i 对应的存储地址(以字节为单位)为_a+i*s i z eo f(a i )。25、一个数组的数组名实际上是指向该数组首元素的指针,并且在任何时候都不允许_ _ _ _ 修 改 它。26、假定指向一维数组b 10 中元素b 4 的指针为p,则 p+3所指向的元素为_b7,p-2所指向的元素为5 2 o27、若 要 定 义 整 型 指 针 p 并 初 始 指 向 x,则所使用的定义语句为_ i n t*p =&x o28、若 p 指向x,则 _*p _ _ _ _ 与 x 的表示是等价的。29、在一个二维数组i n t 中,包含的一维 元 素 a i 的类型为i n t n ,访间a i 时返回值的类型为一 i n t*。30、假定一个二维数组为c 5 8 ,则 c 3 的值为二维元素c 3 0的地址,c 3+2的值为二维元素_ c 3 2 的地址。31、假 定 p为指向二维数组i n t d 4 6 的指针,则 p的类型为一i n t (*)6 。32、假定a 是一个二维数组,则 的 指 针 访 问 方 式 为 _*(*(a+i)+j)33、执行i n t p=n ew i n t 操作得到的一个动态分配的整型对象为*p。34、执 行 i n t *p=n ew i n t 10 操作,使 p 指向动态分配的数组中下标为。的元素,该元素可表示为_*p 或_P。_ _ _ _ _ _。35、执 行 ch a r *p=n ew ch a r(a)操作后,p所指向的数据对象的值为_a o36、执行n ew ch a r m n 操作时的返回值的类型为ch a r (*)n 37、执行_ del et e_ p 操作将释放由p 所指向的动态分配的数据空间。38、执行_ del et e p 操作将释放由p 所指向的动态分配的数组空间。39、NUL L 是一个符号常量,通常作为空指针值,它的具体值为_ _ 0 _ _ _ _ 040、变量v 定义为“do u b l e v=23.4;”,要使指针p v指向v,则定义p v的语句为_ _ _ do u b l e*p v=&v o41、已知语句“co u t p 己的输出是“H el l o!”,则语句“co u t *p;输出的是_ H o42 .已知语句 co u t n a me等 价 的 表 达 式 是(*p).name。4 6、与 结 构 成 员 访 问 表 达 式(*fp).s co r e等 价 的 表 达 式 是_fp-s co r e o47 已知有定义“i n t x,a =5,7,9 ,*p a=a;,在执行“x=+*p a;”语句后,x 的值是_ _ _6 _ _ _ _ o48、已知有定义“i n t x,a =6,10,12),*p a=a;,在执行“x=*+p a;”语句后,*p a 的值是0_49、已知有定义“i n t x,a =15,17,19),*p a=a;w,在执行 x=*p a+;”后,*p a 的值是_ 7 o50、若 采 用 p-a b c(y)表达式调用一个成员函数,在成员函数中使用的_ t h i s _ 就代表了类外的p指针。51、在一个用数组实现的队列类中,包含有两个数据成员,一个指明队首元素位置,另一个 指 明 队列长度。52、在一个用数组实现的队列类中,包含有两个数据成员,一个指明队列长度,另一个指明一 队 首 _ _ _ _ _ _ 元素的位置。53、在一个用数组实现的队列类中,假定数组长度为M S,队首元素位置为fi r s t ,队 列 长 度 为 l en gt h ,则 插 入 个 新 元 素 的 位 置 为_ _ _(f i r s t+l en gt h)MS.54、在一个用数组实现的队列类中,假定数组长度为M S,队首元素位置为fi r s t,队列长度为l en gt h,则删除一个元素后队首的位置为(f irst+l)MS。55、定义类动态对象数组时,其元素只能靠自动调用该类的 无参构造函数来进行初始化。56、为了释放类对象中指针成员所指向的动态存储空间,则需要为该类定义析构函数。57、假定A B 为一个类,则执行“A B 语句时,系统自动调用该类构造函数的次数为_ 10。58、假定一个类对象数组为A N,当离开它的作用域时,系统白动调用该类析构函数的次数为_N。6 0、假定指针p指向一个动态分配的类对象,则当执行“del et e p;语句时,在 释 放 p所指向的动态存储空间之前将自动调用该类的 析构函数6 1、假定A B 为一个类,该类中含有一个指向动态数组空间的指针成员p a,则在该类的析构函数中应该包含有一条_ del et e p a;语句。三、程序填空题:1、采用指针访问方式从键盘给数组a N 输入数据,然后对元素值重新按逆序存放并输出。ft i nc l u d e c ons t i nt N=8;v oi d m a i n()(i nt a N ,*p,*q;for(p=a;p*p;p=a;q=a+N-l;w hi l e(p q)i nt r=*p;*p=*q;*q=r;p+;q+;)for(p=a;p a+N;p+)c ou t *p(2)p+(或+p)(3)q (或一q)2、假定有定义为s t r u c t N 0DE i nt d a t a;N O DE*nex t;下面算法根据 t a b l e数组中的n 个元素建立一个表头指针为L 的链表,链表中结点值的顺序与数组元素值的顺序正好相反。v oi d f6(N 0DE*&L,i nt t a b l et ,i nt n)(L=N U L L;i f(nd a t a=_ _ _ _(2)_ _ _;p-nex t=L;一 ;i+;)2、(1)i n(2)t a b l e i(3)L=p3、已知-维数组类AR R AY的定义如下,构造函数的作用是把参数n的值赋给s,给v动态分配长度为n的数组空间,接着利用数组参数a初始化v所指向的数组。c l a s s AR R AYi nt *v;指向存放数组数据的空间i nt s;数组大小pu b l i c:AR R AY(i nt a ,i nt n);AR R AY()d el et e v;i nt s i z e()r et u r n s;i nt&oper a t or (i nt n);;(1)AR R AY(i nt a ,i nt n)(i f(n=0)v=N U L L;s=0;r et u r n;s=n;v=_ (2)一;for(i nt i=0;i n;i+)(3)_ _ _;)3、(1)AR R AY:(2)new i nt n (3)v i =a i 4、下面是一维数组类AR R AY的定义,AR R AY与普通一维数组区别是:(a)用()而不是进行下标访问,(2)下标从1而不是从0开始,(c)要对下标是否越界进行检查。c l a s s i nt *v;指向存放数组数据的空间i nt s;数组大小pu b l i c:AR R AY(i nt a ,i nt n);AR R AY()d el et e v;i nt s i z e()r et u r n s;i nt&oper a t or ()(i nt n);_ _ _(1)_ _ _oper a t or ()(i nt n)/()的运算符函数定义i f(2)c er r 下标越界!;ex i t(l);)r et u r n _ _(3)_ _ _;)4、(1)i nt&AR R AY:(2)ns (3)v n-l(或*(v+nT)5、已知一个类的定义如下:#i nc l u d ec l a s s AA i nt a 10;i nt n;pu b l i c:v oi d S et A(i nt a a ,i nt nn);用数组a a初始化数据成员a,用nn初始化数据成员ni nt M a x AO ;从数组a中前n个元素中查找最大值v oi d S or t A();采用选择排序的方法对数组a中前n个元素进行从小到大排序v oi d I ns er t AO ;采用插入排序的方法对数组a中前n个元素进行从小到大排序v oi d P r i nt AO ;依次输出数组a中的前n个元素该类中M a x AO函数的实现如下,请在标号位置补充适当的内容。i nt _ _ _ _(1)(i nt x=a 0;for(i nt i=l;i x)_ _ _(2)_ _ _;_(3);5、(1)AA:M a x AO(2)x=a i(3)r et u r n x6、已知一个类的定义如下:#i nc l u d ec l a s s AA i nt a 10;i nt n;pu b l i c:v oi d S et A(i nt a a ,i nt nn);用数组a a初始化数据成员a,用r m初始化数据成员ni nt M a x A();从数组a中前n个元素中查找最大值v oi d S or t AO ;采用选择排序的方法对数组a中前n个元素进行从小到大排序v oi d I ns er t AO ;采用插入排序的方法对数组a中前n个元素进行从小到大排序v oi d P r i nt A();依次输出数组a中的前n个元素v oi d AA:S or t AO(i nt i,j;for(i=0;_ _ _ _(1)_ _ _;i+)i nt x=a i ,k=i;for(j=i+l;j n;j+)i f(a j x)_ _(2)-a k =a i ;;)6、(1)i n-l (或 i=n-2)(b)x=a j ;k=j;(c)a i =x7、已知一个类的定义如下:#i nc l u d ec l a s s AA i nt a 10;i nt n;pu b l i e:v oi d S et A(i nt a a ,i nt nn);用数组a a初始化数据成员a,用n n初始化数据成员ni nt M a x AO ;从数组a中前n个元素中查找最大值v oi d S or t AO ;采用选择排序的方法对数组a中前n个元素进行从小到大排序v oi d I ns er t AO ;采用插入排序的方法对数组a中前n个元素进行从小到大排序v oi d P r i nt A();依次输出数组a中的前n个元素;v oi d _ _ _(1)_ _i nt i,j;for(i=l;i=0;j)i f(x a j )_ _(2)_el s e _ _ _(3)_ _ _;a j+l =x;7、(1)AA:I ns er t A()(2)a j+l =a j (3)b r ea k8、已知一个类的定义如下:#i nc l u d ec l a s s AA i nt a 10;i nt n;pu b l i c:v oi d S et A(i nt a a ,i nt nn);用数组a a初始化数据成员a,用nn初始化数据成员ni nt M a x A();从数组a中前n个元素中查找最大值v oi d S or t AO ;采用选择排序的方法对数组a中前n个元素进行从小到大排序v oi d I ns er t AO ;采用插入排序的方法对数组a中前n个元素进行从小到大排序v oi d P r i nt A();依次输出数组a中的前n个元素最后输出一个换行;使用该类的主函数如下:v oi d m a i n()(i nt a 10 =23,78,46,5 5,62,76,9 0,25,3 8,42);AA x;i nt m=_ _ _(2)_ _ _;_;c ou t m end l;)该程序运行结果为:23 78 46 5 5 62 76788、(1)x.S et A(a,6)(2)x.M a x A()(3)x.P r i nt AO9、已知一个类的定义如下:#i nc l u d ec l a s s AA i nt a 10;i nt n;pu b l i c:v oi d S et A(i nt a a ,i nt r m);用数组a a 初始化数据成员a,用nn初始化数据成员ni nt M a x A();从数组a中前n 个元素中查找最大值v oi d S or t AO ;采用选择排序的方法对数组a中前n 个元素进行从小到大排序v oi d P r i nt A0;依次输出数组a中的前n 个元素,最后输出一个换行);使用该类的主函数如下:v oi d m a i n()(i nt a 10 =23,78,46,5 5,62,76,9 0,25,3 8,42;_ _(D _;x.S et A(a,8);i nt _ _ _(2)_ _ _;_ _ _;x.P r i nt A();c ou t m c l a s s A i nt a;pu b l i c:A()a=0;_ _ _ 定义构造函数,用参数a a 初始化数据成员a);m a i n()_;定义类A 的指针对象p_(3)_;用p 指向动态对象并初始化为整数510 答案:(1)A(i nt a a):a(a a)(2)A*p11 c l a s s A(c ha r *a;pu b l i c:_ _(D _ 定义无参构造函数,使 a 的值为空A(c ha r *a a)a=_ _ _(2)_ _ _;s t r c py(a,a a);用a a 所指字符串初始化a 所指向的动态存储空间)_ _(3)定义析构函数,删除a 所指向的动态存储空间);(3)p=new A(5)11、答案:(D A()a=0;或 A():a(0)注:数据。可用 N U L L 代替(2)new c ha r s t r l en(a a)+l(3)A()d el et e a;12 c l a s s A i nt a,b;pu b l i c:A(i nt a a=0,i nt b b=O)_ _ _(1)_ _ _ 分别用 a a 和 b b 对应初始化 a和 b);m a i n();定义类A 的对象x并用5 初始化,同时定义y并用x初始化一 一;定义P 指针,使之指向对象x12、答案:(1):a(a a),b(b b)(2)A x(5),y (x)注:x(5)与 x=5 等效,y (x)与 y=x 等效(3)A*p=4x13、c l a s s A i nt a,b;pu b l i c:一定义构造函数,使参数a a 和 b b 的默认值为0,在函数体中用a a 初始化a,用 b b 初始化b);m a i nO A*pl,*p2;_(2)_ ;调用无参构造函数生成由pl 指向的动态对象(3)_ ;调用带参构造函数生成由p2指向的动态对象,使a 和 b 成员分别被初始化为4 和 5)13 答案:(1)A(i nt aa=O,i nt bb=O)a=aa;b=bb;(2)pl=ne w A(3)p2=ne w A(4,5)14、一种类定义如下:c l ass Goods(pri vate:c h ar gd_ nam e 20;i nt we i gh t;stati c i nt total we i gh t;publ i c:Goods(c h ar*str,i nt w)strc py(gd_ nam e,str);we i gh t/;total we i gh t+=we i gh t;商品名称商品重量同类商品总重量构造函数 Goods()total we i gh t-=we i gh t;c h ar*Ge tN()_ _ _ _ _ _;返回商品名称i nt Ge tW()re turn we i gh t;_(2)_ _ _ Ge tT otal _ W e i gh t()定义静态成员函数返回总重量 _;14、(1)re turn gd_ nam e (2)stati c i nt(3)re turn total we i gh tI四、阅读程序题:1、#i nc l ude#i nc l ude voi d m ai n()c h ara510=stude nt,work e r,sol di e r,c adre,pe asant;c h ar si 10,s210;strc py(si,a0);strc py(s2,a0);f or(i nt i=l;i 0)strc py(si,ai);i f(strc m p(ai,s2)0)strc py(s2,ai);)c out sl,s2 e ndl;2、nc l ude#i nc l ude c l ass CD c h ar*a;i nt b;publ i c:voi d Ini t(c h ar*aa,i nt bb)(a=ne w c h arstrl e n(aa)+l;strc py(a,aa);b 二 bb;)c h ar*Ge ta()re turn a;i nt Ge tb()re turn b;voi d Output()c out a b e ndl;dx;voi d m ai n()(CD dy;dx.Ini t(abc de f”,30);dy.Ini t(zzsh e nyaf e nz,,3*dx.Ge tb()+5);dx.Output();dy.Output();)abc de f 30sh e nyaf e n 9 53、#i nc l ude#i nc l ude c l ass CD c h ar*a;i nt b;publ i c:voi d Ini t(c h ar*aa,i nt bb)(a=ne w c h arstrl e n(aa)+1;strc py(a,aa);b=bb;c h ar*Ge ta()re turn a;i nt Ge tb()re turn b;voi d Output()c out a,*b e ndl;;voi d m ai n 0(CD dx,dy;c h ar a 20;dx.Ini t(z/abc de fzz,30);strc py(a,dx.Ge ta();strc at(a,xyz);dy.Ini t(a,dx.Ge tb()+20);dx.Output();dy.Output();)abc de f 30abc de f xyz 504、#i nc l ude#i nc l ude c l ass A c h ar*a;publ i c:A(c h ar*s)a=ne w c h arstrl e n(s)+l;strc py(a,s);c out a e ndl;A()de l e te a;c out z De struc tor!/z e ndl;);voi d m ai n()A x(xuxi aok ai);A*y=ne w A(we i rong);de l e te y;)xuxi aok aiwe i rongDe struc tor!De struc tor!5、#i nc l ude c l ass A i nt a;publ i c:A(i nt aa=0):a(aa)c out a,;)A()c out X xk;);voi d m ai n()A*p;A x3=l,2,3,y=4;c out e ndl;p=ne w A3;c out data=x;p-ne xt=NU LL;i f(l i st=NU LL)re turn p;NODE*pl=l i st;wh i l e(pl-ne xt!=NU LL)pl=pl-ne xt;表尾/3行 4行 5行 6行/7行,链表非空先找到j pi bp;8行,让原表尾指针指批注MS2:应让指针域指向新添加向新添加的结点的结点错误行的行号为_2 _和_8_ _ _ _o分别改i E为 ODE*p=ne w NODE;和 strc py(pl,p)一 pl-ne xt=p;2、假定要求下面程序输出结果为“d=8 00,f=60,在第4-23行中存在着三条语句错误,请指出错误语句的行号并改正。#i nc l ude c