C二级上机改错题_第1页
C二级上机改错题_第2页
C二级上机改错题_第3页
C二级上机改错题_第4页
C二级上机改错题_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上机改错题1、 该程序运行时有错误,请改正错误,使得程序正常运行,并且要求最后一个catch() 必须抛出执行的任何异常。程序通过抛出异常输出: error 0 ERROR注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include <iostream.h>int main()trythrow("error");/*error*catch(char s)cout<<s<<endl;trythrow(int)0);/*error*catch()cout<<i<<

2、;endl;trythrow(0);throw("error");/*error*catch()cout<<"ERROR"<<endl; return 0;【答案】(1)catch(char* s)(2)catch(int i)(3)catch(.)【审题分析】本程序是对各种异常信息的处理。try-catch的结构中,catch子句用来捕捉异常的信息。【解题思路】(1)第1个标识前的异常抛出语句为"throw("error");",其中的类型为字符串。所以对应的异常捕捉语句catch中应该符

3、合这个类型,而程序中给出的语句"catch(char s)"是字符型的,所以第2个标识下的语句修改为"catch(char* s)"。(2)第2个标识前的异常抛出语句为"throw(int)0);",其中的类型为int。所以对应的异常捕捉语句catch中应该符合这个类型,所以补充catch子句中的类型,否则找不到匹配的catch块,那么系统就会调用一个系统函数,使程序终止运行。即第1个标识下的语句修改为"catch(int i)"。(3)如果在catch子句中没有指定异常信息的类型,那么就用删节号"&qu

4、ot;表示它可以捕捉任何类型的异常信息,即修改为"catch(.)"。2、 该程序运行时有错,请改正错误,使得程序正确执行,并且输出以下语句: TestClass1: 0 TestClass2 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include <iostream.h>struct TestClass1TestClass1(int i=0)m_i = i;void print()cout<<"TestClass1: "<<m_i<<endl

5、;int m_i;class TestClass2public:TestClass2()void print()cout<<"TestClass2"<<endl;/*error*private:TestClass2();int main()/*error*TestClass1 obj1();/*error*TestClass2 obj2();obj1.print();obj2.print();return 0;【答案】(1)public:(2)TestClass1 obj1(0);或TestClass1 obj1; (3)TestClass2 obj

6、2;【审题分析】程序要求输出TestClass1: 0和TestClass2 。从已定源程序的main主函数开始入手,可以看出程序首先定义TestClass1和TestClass2类型的变量,然后通过调用其中的print成员函数实现输出结果。【解题思路】(1)第1个标识下的"private:TestClass2()"是析构函数,它不是私有的,所以这里应该为"删除private:或修改为public:"。(2)第2个标识下的"TestClass1 obj1();"语句是定义一个TestClass1类型的对象obj1(),根据类TestC

7、lass1构造函数的定义"TestClass1(int i=0)",知道存在整型参数,应该补充参数,或者只是先定义一个对象名,然后在使用时补充参数,即修改为"TestClass1 obj1(0);或TestClass1 obj1;"。(3)同理第3个标识下的"TestClass2 obj2();"语句修改为"TestClass2 obj2;"。3、 该程序运行有问题,请改正main函数中的错误,使程序的输出结果是: nember =1 nember = 10 nember = 100注意:不要改动main函数,不能

8、增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include <iostream.h>class TestClasspublic:TestClass(int i)nember=i;void SetNember(int m)nember=m;int GetNember()constreturn nember;void Print() constcout<<"nember="<<nember<<endl;private:int nember;void main()/*error*TestClass obj

9、1;obj1.Print();TestClass obj2(3);/*error*obj1.nember = 10;/*error*TestClass.SetNember(100);obj1.Print();obj2.Print();【答案】(1)TestClass obj1(1);(2)obj1.SetNember(10);(3)obj2.SetNember(100);【审题分析】程序要求输出nember的值为1,10,100。从已定源程序的main主函数开始入手,可以看出程序定义了TestClass类的对象obj1和obj2,然后通过调用类的成员函数实现了题目中的输出结果。【解题思路】(1

10、)第1个标识下,"TestClass obj1;"语句是声明TestClass类的对象obj1,根据TestClass类构造函数的定义TestClass(int i),存在整型参数,并且题目要求第一个输出结果为1,所以补全参数1,即第1个标识下的"TestClass obj1(1);"。(2)第2个标识下的"obj1.nember = 10;"应该是调用成员函数SetNember赋值。在C+中成员函数的使用形式应该是:对象名.成员函数,所以修改为"obj1.SetNember(10);"。(3)类是对象的抽象,而对

11、象是类的具体实例。第3个标识下"TestClass.SetNember(100);"语句中的TestClass为类,并不是对象,这里应该是使用定义的对象,即obj2,修改为"obj2.SetNember(100);"。4、 该程序运行时有错误,请改正错误,使得程序通过运行。程序输出: 5 a 1注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include<iostream>template<class T>/*error*t min(t x,t y)return (x>

12、;y) ? y:x;void main()int n=5;/*error*char c="a"int d=1;/*error*cout << min(n,n) << endl;cout << min(c,c) << endl;cout << min(d,d) << endl;【答案】(1)T min(T x,T y)(2)char c='a'(3)using namespace std;【审题分析】程序的主要功能是实现题目要求的输出,解题的关键是通过调试中出现的错误提示语句,进行主要分析

13、。【解题思路】(1)C+是区分大小写的,"template<class T>"语句中定义的模板类为T不是t,所以第1个标识下的"t min(t x,t y)"修改为"T min(T x,T y)"。(2)第2个标识下的"char c="a""语句中的变量a为char型,赋值为字符a,在C+中应该使用单引号标注字符变量,而不是双引号,所以修改为"char c='a'"。(3)在程序中用到C+标准库时,要使用std标准命名空间进行限定。cout为标准库

14、函数,所以要声明cout是在命名空间std中定义的流对象,即添加using namespace std;"。5、 该程序运行时有错误,请改正其中的错误,使得程序正确运行。程序输出: s1:n=20 s2:n=10 执行s3.add(s1,s2) s3:n=30 s4:n=30注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include<iostream.h>class TestClassint n;public:TestClass() TestClass(int m)n=m;/*error*TestClass ad

15、d(TestClass s1, s2)this->n=s1.n+s2.n;/*error*return (this);void disp()cout << "n=" << n << endl;/*error*void main()TestClass s1(20),s2(10),s3,s4;cout << "s1:"s1.disp();cout << "s2:"s2.disp();s4=s3.add(s1,s2);cout << "执行s3.add(

16、s1,s2)ns3:"s3.disp();cout << "s4:"s4.disp();【答案】(1)TestClass add(TestClass s1, TestClass s2)(2)return (*this);(3);【审题分析】本题中的功能是设置类中的成员数值,然后利用成员函数add求和。从已定源程序的main主函数开始入手,可以看出程序首先通过类TestClass中的成员函数实现题目中的输出要求。【解题思路】(1)打开modi1.cpp,调试程序,根据显示的错误提示,知道语句"TestClass add(TestClass s1

17、, s2)"中的变量"s2"没有声明类型,所以补充"s2"的类型,即"TestClass add(TestClass s1, TestClass s2)"。(2)"this->n=s1.n+s2.n;"语句中的this变量为指针变量,所以第2个标识下的"return (this);"返回语句中的this变量,应该返回指针型,所以修改为"return (*this);"。(3)C+中类的定义格式应为"class 类名;",以分号为结尾,所以第

18、3个标识下,类结尾处补充分号";",即修改为""。6、 该程序运行时有错误,请改正错误,使得程序正常运行。并使程序输出结果为: ABCDEF ABCDEF ABCDEF注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include<iostream.h>void main()/*error*char s1="ABC"DEF"/*error*char s2="ABCDEF"/*error*char s3="ABC" +&

19、quot;DEF"cout<<s1<<endl;cout<<s2<<endl;cout<<s3<<endl;return;【答案】(1)char s1="ABC"(2)char s2="ABC(3)char s3="ABC"【审题分析】程序要求输出字符串数组的值。从已定源程序的main主函数开始入手,可以看出程序通过输出函数cout实现三个字符串数组值的输出。【解题思路】(1)字符串数组以""结束赋值语句,所以"ABC "D

20、EF"应该是字符串数组s1的赋值语句,它的错误提示"modi1.cpp(5) : error C2001: newline in constant ",说明 "DEF"被认为是新的值,根据题目要求它其实应该是与ABC是一个数组串的,所以应该在" ABC后面添加""",即第1个标识下修改为"char s1="ABC ""。(2)根据题目中给出的输出结果,知道s2的输出也是ABCDEF,那么说明第2个标识下的s2值应该是ABCDEF,第一行与第二行是一个字符串。在C+中

21、,在一个字符串中最后一个字符为"",则标识它是续行符,下一行的字符是该字符串的一部分,所以在第一行的ABC后面添加"",即"char s2="ABC"。(3)字符串数组s3的赋值语句,错误提示"modi1.cpp(12) : error C2110: cannot add two pointers"不能添加两个指针,不是用""来连接的,两个字符串变量之间不可以用""连接,所以这里删除"",即第3个标识下修改为"char s3="

22、;ABC""。7、 但该程序运行有问题,请改正main函数中的错误,使程序的输出结果是: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include<iostream.h>#include<iomanip.h>void main() int a33=1,2,3,4,5,6,7,8,9;int *p, i;/*error*p = a;for(i=0;i<9;i+) cout<<setw(2)<<

23、*(p+i); /*error*cout<<setw(2)<<*(a+i);if(i%3=2) cout<<endl;【答案】(1)p = &a00;(2)cout<<setw(2)<<*(*a+i); 【审题分析】从已给定源程序的main主函数开始入手,可以看出程序是通过数组与指针两种方法输出数组值。【解题思路】(1)打开modi1.cpp,调试程序,显示错误提示为第一标识下"modi1.cpp(7) : error C2440: '=' : cannot convert from 'int

24、 33' to 'int *'",a为二维数组型变量,将其值赋值给p,应该是p指向数组a的起始位置,即 "p = &a00;"。(2)程序中第2个标识下的"cout<<setw(2)<<*(a+i);"语句应该是输出数组a中元素的值,而该语句是*(a+i)指向数组第i个位置,要指向其值应该是*(*a+i),所以第2个标识下的语句改为"cout<<setw(2)<<*(*a+i);"。8、 该程序运行时有错,请改正其中的错误,使得程序正常运行,并使

25、程序输出的结果为: Hello注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include<iostream.h>void main()/*error*typedef BOOL bool;/*error*BOOL a = FALSE;int i=0X80000000;/*error*a = !i;if( a )cout<<"Hello"<<endl;return;【答案】(1)typedef bool BOOL;(2)BOOL a = false;(3)a = (i!=0);【审题

26、分析】程序要求输出Hello。本题程序中不存在复杂的结构,从已定源程序的main主函数依次处理错误提示下的语句即可。【解题思路】(1)第1个标识下的"typedef BOOL bool;"。 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。一般形式应该是:typedef 标准数据类型 新的数据类型名,所以第1个标识下应该是"typedef bool BOOL;"。(2)C+中逻辑假的值应该是false而不是FALSE,所以这里修改为"BOOL a = false;"。(3)题目要求输出Hello,它要在"

27、if( a )"为真的时候输出" Hello"。i的值为0X80000000,第3个标识下a = !i;语句中a的值为假。i!=0为真,所以修改为"a = (i!=0);"。9、 该程序运行时有错,请改正其中错误,使得程序正常运行,并使程序输出的结果为: c Test注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include<iostream.h>void main()/*error*char c ="c"cout<<c<<end

28、l;/*error*char b=1024;/*error*b += 1024;if( b = 2048)cout<<"Test"<<endl;return;【答案】(1)char c ='c'(2)int b=1024;(3)b += 1024;【审题分析】本题的功能是输出字符c 和字符串Test。因为本题程序中不存在复杂的结构,解题思路,从已定源程序的main主函数依次处理错误提示下的语句即可。【解题思路】(1)打开modi1.cpp,调试程序,显示错误提示为第一标识下"odi1.cpp(5) : error C2440

29、: 'initializing' : cannot convert from 'char 2' to 'char'"。变量c的类型为字符型,字符型值应该是用单引号,双引号是字符串型。所以这里修改为 "char c ='c'"。(2)根据第3个标识下的语句知道,b的值加上1024,然后判断b的值是否为2048,所以这里b的类型应该是整型,而不是字符型,所以修改为"int b=1024;"。(3)显示第3个标识下的语句"b += 1024;"的错误提示modi1.c

30、pp(10) : error C2018: unknown character '0xa3',因为语句中的";"为中文输入法下的输入,并不是英文下的"",所以修改为"b += 1024;"。10、 该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为: 1 1 2 1注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。#include<iostream.h>class TestClass/*error*/*error*const int

31、 j;public:TestClass()/*error*static int i=0;cout<<+i<<endl;cout<<j<<endl;void main()TestClass obj1;TestClass obj2;obj2.j += obj1.j;return;【答案】(1)添加语句:public:(2)int j;(3)添加语句:j=1;【审题分析】本题程序的功能是输出1 1 2 1。解题思路从已定源程序的main主函数开始入手,程序通过类TestClass中成员函数实现题目中要求的输出。【解题思路】(1)打开modi1.cpp,

32、调试程序,显示错误提示为"modi1.cpp(22) : error C2248: 'j' : cannot access private member declared in class 'TestClass'",第1个标识下的j变量由于被定义为私有的,其他函数不可获得,这里应该是public型,所以在第1个标识下添加"public:"。(2)程序中对于j的调用,说明j并不是常量,所以修改j的定义,将其定义为变量,而不是常变量,即修改第2个标识下语句为"int j;"。(3)题目中要求调用对象,输出j

33、的值为1。原程序中j变量的使用并没有赋初始化值,输出值为乱码,所以第三个标识下添加"j=1;"。11、 该程序运行时有错误,请改正其中的错误,使程序正常运行,并且输出以下结果: (4,5) 7,8 (4,8)注意:错误的语句在/*error*的下面,修改该语句即可。#include<iostream.h>class CObj0public:CObj0(int i,int j)x = i;y = j;/*error*virtual void move(int a;int b)x+=a;y+=b; void print()cout<<"(&qu

34、ot;<<x<<","<<y<<")"<<endl;public:int x,y;class CObj1: public CObj0public:/*error*CObj1(int i,int j,int k):(i,j)m= k;n= l;void print()cout<<m<<","<<n<<endl;void func()move(3,5);void display()/*error*print();private:in

35、t m,n;void main()CObj0 obj(4,5);obj.print();CObj1 obj1(1,3,7,8);obj1.func();obj1.print();obj1.display();【答案】(1)virtual void move(int a,int b)(2)CObj1(int i,int j,int k,int l):CObj0(i,j)(3)CObj0:print();【审题分析】程序中定义了CObj0和CObj1两个类,CObj1公有派生于CObj0,CObj0有两个public成员变量x和y,CObj1有2个private成员变量m和n,CObj0的prin

36、t函数打印x和y的值,CObj1的print函数打印m和n的值,display函数调用基类的print函数打印CObj1的x和y的值。【解题思路】(1)编译程序可知第1标识下有错误,此处是声明虚函数,虚函数的声明方式为:virtual <类型说明符> <函数名> (<参数表>),参数表中各参数之间应该用","隔开,因此第1个标识下应改为"virtual void move(int a,int b)"。(2)在主函数里"CObj1 obj1(1,3,7,8);",可知构造函数CObj1()有四个参数,

37、完成变量m、n、x和y的初始化,k和l赋值给m和n,i和j赋值给x和y,x和y的初始化可通过基类构造函数来完成对x和y的初始化,第2个标识下应改为CObj1(int i,int j,int k,int l):CObj0(i,j)。(3)由程序运行结果可知标识3下调用的是基类的print()函数,而"print();"是调用的派生类的print()函数,因此此时只能通过类名来直接调用print()函数,即第3个标识下应改为"CObj0:print();"。12、 该程序运行时有错,请改正其中的错误,使程序正常运行,并且使程序输出的结果为: a=7,b=0

38、a=8,b=10注意:错误的语句在/*error*的下面,修改该语句即可。#include<iostream.h>class CObjpublic:/*error*friend void func(CObj&,int,int);void display()/*error*cout<<"a="<<a<",b="<<<<b <<endl;private:int a,b;void func(CObj& obj,int t)obj.a = t;obj.b = 0;voi

39、d func(CObj& obj,int t,int j)obj.a = t;obj.b = j;void main()/*error*CObj obj1func(obj1,7);obj1.display();func(obj1,8,10);obj1.display();【答案】(1)添加语句:friend void func(CObj&,int);(2)cout<<"a="<<a<<",b="<<b <<endl;(3)CObj obj1;【审题分析】程序中定义了类CObj,其

40、有两个成员变量a和b,通过友元函数func()可改变a和b的值,display()成员函数显示a和b的值。【解题思路】(1)标识1处是声明一个友元函数,友元函数是在类声明中由关键字friend修饰的非成员函数,由friend void func(CObj&,int,int)可知,函数func()是CObj类的友元,由程序后面的具体实现可知该函数重载了,已经声明了友元函数friend void func(CObj&,int,int),另外一个友元函数func(CObj& obj,int t)没有声明,因此第1个标识下应添加"friend void func(CO

41、bj&,int);"。(2)display()函数打印类成员变量a和b的值,cout流中的数据是用流插入运算符"<<"顺序加入的,因此"<<<<"不正确,第2个标识下应改为"cout<<"a="<<a<<",b="<<b <<endl;"。(3)标识3处是声明类对象,对象声明格式为:<类名> <对象名> (<参数表>); ,对象声明语句是一个完整的

42、语句,应该以""结尾,因此第3个标识下应改为"CObj obj1;"。13、 该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为: 30 130注意:错误的语句在/*error*的下面,修改该语句即可。#include<iostream.h>int a=10;class CObjpublic:CObj()a = b= 0;void display()/*error*cout<<a<<b<endl;void func(int a)/*error*a += a;void func2()/*er

43、ror*a += a;private:int a,b;void main()CObj obj;obj.func(3);obj.display();obj.func2();obj.display();【答案】(1)cout<<a<<b<<endl;(2)this->a += a;(3)a += :a;【审题分析】程序当中定义了全局变量a和类CObj,类CObj含有成员变量a和b,类CObj的变量a和全局变量a均为整型变量,名字完全一样,使用时需要注意区分。类CObj成员函数display()打印变量a和b的值,func(int a)函数和func2()均

44、使类成员变量a增加,但是增加方式不同。【解题思路】(1)成员函数display()打印变量a和b的值,即cout输出a和b的值,cout流中的数据是用流插入运算符"<<"顺序加入的,因此"<"不正确,因此第1个标识下应改成cout<<a<<b<<endl。(2)在func(int a)中,参数a传递进来,其和成员变量a名字一样,因此第2个标识下的"a += a"有歧义,从程序的运行结果来分析,CObj obj声明对象obj,初始化类成员变量a和b均为0,调用func函数后输出30,

45、说明a为3,b为0,因此这里应该是成员变量与参数a的和赋给成员变量a,正确的写法是"this->a += a;"。(3)func2()函数虽然没有参数,但是成员变量a和全局变量a重名,第3个标识下"a += a"也会有歧义,分不清楚是全局变量加倍还是类成员变量加倍或者其他情况,调用func2()函数后,输出"130",说明a为13,b为0,因此是成员变量与全局变量a的和赋给成员变量a,正确的写法是"a += :a;",":a"表示是全局变量a。14、 该程序运行时有错误,请改正其中的错误,

46、使程序正确运行。并且使程序输出的结果为: OK注意:错误的语句在/*error*的下面,修改该语句即可。#include<iostream.h>class CBasepublic:CBase()a = b= 0;private:int a,b;class CDerive1 : public CBasepublic:CDerive1()/*error*virtual void func();class CDerive2: public CDerive1public:CDerive2()a = 0;b = 0;void func()/*error*cout<<"O

47、K"<endl;private:int a;int b;void main()CDerive2 obj;/*error*CDerive1 *p =(CDerive1*) obj;p->func();【答案】(1)virtual void func() = 0;(2)cout<<"OK"<< endl;(3)CDerive1 *p =(CDerive1*) &obj;【审题分析】程序中定义了类CBase、CDerive1和CDerive2,类CDerive1公有派生于类CBase,CDerive2公有派生于类CDerive

48、1,在类CDerive1中定义了虚函数func(),但是没有给出具体实现,派生类CDerive2中给出了func()函数的具体实现,因此CDerive1 类中的func()函数是纯虚函数。【解题思路】(1)由审题分析可知,CDerive1 类中的func()函数是纯虚函数,纯虚函数的定义格式为:virtual <函数类型> <函数名> (<参数表>) = 0,因此第1个标识下应为"virtual void func() = 0;"。func()函数没有参数表。(2)编译程序后发现第2个标识下有错误,cout流中的数据是用流插入运算符&qu

49、ot;<<"顺序加入的,因此"<"不正确,应改成"cout<<"OK"<< endl;"。(3)函数的调用方式有2种:非多态调用和多态调用,非多态调用是指不使用指针或引用的直接调用,多态调用是指通过对象的指针或引用的调用,在主函数中定义了CDerive1 *p,p是指向基类CDerive1的指针,因此是多态调用方式,即通过对象的指针来调用,应该把派生类对象的地址赋给p,而不是对象名,因此第3个标识下应改为"CDerive1 *p =(CDerive1*) &obj;

50、"。15、 该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为: Hello Visual C+! Hello Visual C+!注意:错误的语句在/*error*的下面,修改该语句即可。#include<iostream.h>class CMyObjectpublic:CMyObject()/*error*cout<<"Hello,"Visual C+!"<<endl;CMyObject(int n)/*error*cout<<"Hello,nVisual C+!&qu

51、ot;<<endl;/*error*CMyObject();void main()CMyObject obj1;CMyObject obj2(0);【答案】(1)cout<<"Hello,"(2)cout<<"Hello,(3)CMyObject()【审题分析】程序当中定义了类CMyObject,含有两个构造函数和一个析构函数,在构造函数内部均使用cou输出一段字符。【解题思路】(1)由程序的运行结果可知,语句CMyObject obj1;定义obj1对象调用默认的构造函数,此时屏幕上输出"Hello Visual C

52、+!",cout流中的数据是用流插入运算符"<<"顺序加入的,第1个标识下"Hello,"字符串插在输出流中,因此必须加双引号引用起来,即第1个标识下应该为"cout<<"Hello,""。(2)第2个标识下"n"表示换行,与要求的输出结果不同,因此第2个标识下应改为"cout<<"Hello,"。(3)析构函数是一个特殊的函数,其函数名与类名相同,并在其名加"",用来与构造函数加以区别,因此第3个标

53、识下应改为"CMyObject()"。16、 但该程序运行时有错,请改正main()函数中的错误,使程序的输出结果如下: Constructor. Default constructor. Area is 12 Area is 0 Area is 12注意:错误的语句在/*error*的下面,修改该语句即可。#include<iostream.h>class CRectangleprivate:double length,width;public:CRectangle()cout<<"Default constructor .n"

54、CRectangle(double l,double w)length=l;width=w;cout<<"Constructor .n"void Set(double l,double w)this->length=l;this->width=w;void GetArea()cout<<"Area is "<<length*width<<endl;void main()CRectangle Rect1(3.0,4.0);/*error*CRectangle Rect2(1);/*error*CR

55、ectangle Rect3;Rect1.GetArea();/*error*Rect2.Set(0);Rect2.GetArea();Rect3.GetArea();【答案】(1)CRectangle Rect2;(2)CRectangle Rect3(Rect1);(3)Rect2.Set(0,0);【审题分析】程序中定义了类CRectangle,有length和width两个成员变量,两个构造函数,Set()成员函数和GetArea()成员函数,Set()成员函数可以改变length和width的值,GetArea()成员函数在屏幕上打印length和width的积。【解题思路】(1)构

56、造函数CRectangle()不带有参数,CRectangle(double l,double w)带有2个参数,在创建对象时会自动调用构造函数,但是参数必须匹配,第1个标识下定义Rect2对象时,有一个参数,而类CRectangle()中并没有重载一个参数的构造函数,编译后出错,因此第1标识下应改为"CRectangle Rect2;"。(2)Rect3.GetArea()输出的结果和Rect1.GetArea()输出结果一致,因此对象Rect3和对象Rect1两者具有相同的length和width值,除定义Rect3对象之外没有改变Rect3l的length和width

57、值,因此Rect3成员变量的初始化是通过拷贝构造函数类实现的,即用Rect1对象去初始化Rect3,因此第2个标识下应改为"CRectangle Rect3(Rect1) ;"。(3)Rect2.GetArea()的输出结果为0,说明Rect2的成员变量length和width值至少一个为0,而Set()函数必须有两个参数,这里Rect2.Set(0)参数不匹配,应改为"Rect2.Set(0,0);"或者"Rect2.Set(0,5)",两个参数当中至少一个为0即可。17、 该程序运行时有错,请改正其中的错误,使程序正确运行,并且使

58、程序输出的结果为: CMyObject,in the construtor CMyObject, in the destrutor注意:错误的语句在/*error*的下面,修改该语句即可。#include<iostream.h>class CMyObject/*error*/*error*CMyObjectcout<<"CMyObject,in the construtor"<<endl;CMyObject()cout<<"CMyObject, in the destrutor"<<endl;void main()CMyObject

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论