面向对象程序设计综合练习题 下载本文

#include //1 using namespace std; //2 class CInteger //3 { //4 public: //5

CInteger(int iNum=0) //6

{m_iNum=iNum;} //7

int operator int() //8 {return m_iNum;} //9

void Print() const //10 {cout<

第8行有错误。原因:类型转换函数没有返回值类型。 改正:去掉返回值类型int

6-1.下面程序中有一处错误,请指出出错的行,说明错误原因,并加以改正。 #include //1 using namespace std; //2 class CBase //3 { public: //4

CBase(int iBase=0):m_iBase(iBase){} //5 virtual void Show() const=0; //6 int Get() const //7 { return m_iBase; } //8

private: //9 int m_iBase; //10 }; //11 class CDerive:public CBase //12 { public: //13 CDerive(int iBase=0,int iDerive=0):CBase(iBase) //14 { m_iDerive=iDerive;} //15 void Show() const //16 { cout<

- 21 -

int m_iDerive; //19

}; //20 //21 void Print(const CBase obj) //22 { obj.Show();} //23 //24 int main(void) //25 { CDerive obj(10); //26 Print(obj); //27 return 0; //28

} //29

答案:

第22行出错

原因:抽象类不能用来直接作函数参数,但可以使用抽象类的引用作参数 改正:将第22行改为: void Print(const Cbase &obj)

6-2.要求用下面的程序实现动态多态性,但程序有错,请指出错误并改正之(指出行号,说明错误原因,写出改正后的语句)。

#include //1 class AA //2 { //3

public: //4 void f(){cout<<\ //5 }; //6 //7 class CC:public AA //8 { //9 public: //10 virtual void f(){cout<<\ //11 }; //12 //13 int main() //14 { //15 AA aa,*p; //16 CC cc; //17 p=&cc; //18 p.f(); //19 return 0; //20 } //21 答案:

第5行中基类中虚函数f()前应加关键字virtual修饰,应改为: virtual void f(){cout<<\第19行p.f();应改为:p->f();

- 22 -

五、程序填空题

1-1.下面程序的功能是:输入三角形的三条边放在变量a,b和c中,判断它们能否构成三角形,若能,则判断是等边、等腰、还是其他三角形,在横线上填上适当内容。

#include void main() { float a,b,c;

cout<<\

【1】 ; //输入三角形的三条边 if(a+b>c&&b+c>a&&c+a>b)

{ if( 【2】 ) //判断是否为等边三角形

cout<<\等边三角形!\\n\

else if( 【3】 ) //判断是否为等腰三角形

cout<<\等腰三角形!\\n\ else cout<<\其它三角形!\\n\

}

else cout<<\不能构成三角形!\\n\}

答案:【1】 cin>>a>>b>>c 【2】 a==b&&b==c

【3】 a==b||a==c||b==c

1-2.以下程序功能是输出1000以内个位数为6且能被3整除的所有数。请填空。

#include void main()

{ int i,j;

for(i=0; 【1】 ;i++) //i的终值,即结束循环的条件 { j=i*10+6;

if( 【2】 ) continue; //如果j是否不能给3整除 // j%3 cout<

} }

答案:【1】 i<100

【2】 j%3

1-3.求n(n≥6)内的所有偶数表示为两个素数之和,图1为输入12的运行结果。补充完整以下程序。【提示:一个偶数n(n≥6)可以表示为1+(n-1), 2+(n-2),3+(n-3),?】

- 23 - 图1

#include #include #include int isprime(int); void main()

{ int num;

cout<<\请输入一个整数N(N>=6):\\n\

cin>>num;

for(int n=6; 【1】 ;n+=2) //n的终值,即结束循环的条件 // n<=num for(int i=3;i<=n/2;i+=2) if( 【2】 ) //判断i和n-i是否素数 } {

{ cout<

}

int isprime(int n)

int i,sqrtm=(int)sqrt(n);

for(i=2; 【3】 ;i++) //i的终值,即结束循环的条件 if( 【4】 )return 0; //如果n为素数,返回0 【5】 ; //否则返回1

} 答案:【1】 n<=num

【2】 isprime(i)&&isprime(n-i) 【3】 i<=sqrtm 【4】 n%i==0 【5】 return 1

3-1.完成下面类中成员函数的定义。 #include using namespace std; class Test

{ public:

Test(int,float); //声明构造函数

test(test&); //声明成员函数text,将test引用对象的值向num和x赋值 private: int num; float x; };

test::Test(int n,float f) //定义构造函数 { num=n;

- 24 -