希望大家帮我做一下这套题啊,太谢谢了

来源:互联网 发布:债券收益率曲线 知乎 编辑:程序博客网 时间:2024/04/30 18:13

一、填空题

1、如果基类有带参数的构造函数,则派生类需采用         方式实现对基类成员的初始化。

2、在C++中,编译时的多态是通过                               来实现的

3、在派生类中对虚函数进行重新定义时,要保证名称、                    必须基类的虚函数一致

4当以保护方式继承时,基类中的公有成员成为派生类的                成员。

5含有纯虚函数的类称为                    

6Windows的位图有两种类型分别为:           位图和           位图

7、对话框有两种类型分别是:                      

8、在Windows程序设计中,通过MFC提供的               可以实现图形、位图和文字的绘制。

9MFC应用程序框架包括三类:单文档                       的应用程序。

10DOS程序不同,Windows程序是通过操作系统发送的                 来处理用户输入的。

11、如果基类有带参数的构造函数,则派生类需采用          方式实现对基类成员的初始化。

12、含有纯虚函数的类称为                    

13、对话框有两种类型分别是:                      

14、定义一个运算符重载函数时,函数名必须以           开头。

二、选择题(共20分,每小题2

1、 在任何继承方式下,派生类的自有成员函数都不能访问原基类的某些成员,这些成员的原访问属性必然是_________

A)公有或保护 B)保护或私有

C)私有或继承的私有 D)继承的私有或公有

2、 运行时的多态是通过基类中的虚函数实现的,虚函数可以是           。

A)普通成员函数   B)有元函数   C)静态成员函数   D)以上都可以

3、 下列运算符中,不能重载的运算符是    A      。

A) ::          B) [ ]          C) &&     D) >>

4、 当用户按下鼠标左键时,系统会发送            消息。

AWM_LBUTTONDOWN BWM_COMMAND

CWM_LBUTTONUP DWM_RBUTTONDBLCLK

5、 下列关于无模式对话框的说法中,正确的是           

A)在退出对话框之前,对话框所在的应用程序不能继续执行

B)对话框弹出后,可以执行所在应用程序的其他操作

C)通过函数DoModal()进行创建、显示和关闭

D)不能通过Create()函数实现无模式对话框的创建

6、 下列关于菜单叙述错误的是          。

A)菜单是一系列命令的列表 

B)点击菜单项可以向系统发送命令消息

C)可以通过控件工具栏创建新的菜单

D)在CMenu类中可以利用AppendMenu()函数添加菜单项

7、 下列函数中,不能重载的函数是          。

A)成员函数    B)非成员函数   C)构造函数     D)析构函数

8、 下列各个成员函数中,纯虚函数是          。

Avoid fun(int)=0 Bvirtual void fun( )           

Cvirtual void fun(int){  } Dvirtual void fun( )=0

9、 下列关于派生类的描述中,错误的          。

A)派生类至少有一个基类

B)一个派生类可以作为另一个派生类的基类

C)派生类的成员除了自身类的成员外,还包含了其基类的成员

D)派生类的成员可以访问其基类中的所有成员

10、下列那些不属于图形设备接口(GDI)抽象基类CGdiObject的派生类          

ACPen           BCBrush         

CCTime          DCFont

11、当实例化派生类对象时,基类和派生类构造函数执行过程为_________

A)只执行派生类的构造函数 

B)先执行派生类的构造函数后执行基类的构造函数

C)只执行基类的构造函数

D)先执行基类的构造函数后执行派生类的构造函数

12、关于抽象类的描述中,错误的是                    。

A)可以说明指向抽象类的指针  B)不可以建立抽象类对象

C)可以说明抽象类的引用      D)指向抽象类的指针不能指向其派生类对象

三、程序理解题(共16分,每题8

1、分析下列程序的运行结果

#include <iostream.h>

class A

{

int a;

public:

    A(int x):a(x)

{ cout << "construct A " << a << endl; }

~A()

{ cout << "desstruct A" << a << endl; }

}; 

class B : public A

{

private:

int   b,c;

const int d;

A   x,y;

public:

B(int v) : b(v), y(b+2), x(b+1), d(b), A(v)

{

c = v;

cout << "construct B" << b <<" "  << c << " " << d << endl;

}

~B()

{ cout << "desstruct B" << b <<" "  << c << " " << d << endl; }

};

void main( )

{ B b1(10);  }

2、分析下列程序的运行结果

#include <iostream.h>

#include <string.h>

class BaseClass

{

private:

char *base;

public:

BaseClass();

~BaseClass();

virtual void Print()

{ cout<<base<<endl; }

};

class DerivedClass:public BaseClass

{

private:

char *derived;

public:

DerivedClass();

~DerivedClass();

virtual void Print()

{ cout<<derived<<endl; }

};

BaseClass::BaseClass():base(new char[7])

{

strcpy(base,"base?");

cout<<"BASE?"<<endl;

}

BaseClass::~BaseClass ()

{

delete []base;

cout<<"BASE!"<<endl;

}

DerivedClass::DerivedClass():derived(new char[10])

{

strcpy(derived,"derived?");

cout<<"DERIVED?"<<endl;

}

DerivedClass::~DerivedClass ()

{

delete []derived;

cout<<"EDRIVED!"<<endl;

}

void main()

{

BaseClass *basePtr=new DerivedClass;

basePtr->Print();

delete basePtr;

}

3、分析下列程序的运行结果

#include <iostream.h>

class B1

{

public:

B1(int i):b1(i)

{ cout<<"构造函数 B1."<<endl; }

void print() { cout<<"b1值为:"<<b1<<endl;} 

private:

int b1;

};

class B2

{

public:

B2(int i):b2(i)

{ cout<<"构造函数 B2."<<endl; }

void print() { cout<<"b2值为:"<<b2<<endl; }

private:

int b2;

};

class B3

{

public:

B3(int i):b3(i)

{ cout<<"构造函数 B3."<<endl; }

int getb3() { return b3; }

private:

int b3;

};

class A : public B2, public B1

{

public:

A(int i,int j,int k,int l):B1(i),B2(j),bb(k),a(l)

{ cout<<"构造函数 A."<<endl; }

void print()

{

B1::print();

B2::print();

cout<<"b3值为:"<<bb.getb3()<<endl; 

cout<<"a 值为:"<<a<<endl; 

}

private:

int a;

B3 bb;

};

void main()

{

A aa(1,2,3,4);

aa.print();

}

4、分析下列程序的运行结果

#include <iostream.h>

class add

{   

public:

virtual void sm()=0;

    virtual void disp(){ }

};

class add1:public add

{  

private:

int m1,n1;

public:

add1(int a,int b) {  m1=a; n1=b;  }

void sm()  {  m1+=n1; n1--; }

void disp()

{   cout<<"m1="<<m1<<"   "<<"n1="<<n1<<endl; }

};

void main()

{  

add1 a(4,6);

add *p=&a;

p->sm();  p->disp();

}

四、程序填空(共28分,每空2分)

1、 根据程序的输出结果分析并完成程序:

运行结果如下:

程序如下:

#include <iostream.h>

         

class Base

{

char str[20];

public:

Base(char *s="Base default")

    {

strcpy(str,s);

        cout<<str<<endl;

}

};

class Inh1:public virtual Base

{

char str1[20];

public:

Inh1(char *s1, char *s2):         

{

strcpy(str1,s2);

        cout<<str1<<endl;

}     

};

class Inh2: public virtual Base

{

char str2[20];

public:

Inh2(char *s1, char *s2):         

    {

strcpy(str2,s2);

        cout<<str2<<endl;

}

};

class Inh3: public Inh1, public Inh2

{

char str3[20];

public:

Inh3(char *s1, char *s2, char *s3, char *s4):         

{

strcpy(str3,s4);

        cout<<str3<<endl;

}

};

void main()

{

Inh3 a("class Base","class Inh1","class Inh2","class Inh3");

}

2、定义一个圆类(Circle),半径(R)属性,初始化、获取、输出数据成员等方法;再定义一个派生类——圆柱体(Column),包含新的数据成员圆柱体的高(H),并求圆柱体的表面积和体积。程序如下:

#include <iostream.h>

class Circle

{   

public:

Circle(float r=0){                  ; } 

float area(){ return 3.14*R*R;}

float get_R() { return R;}

private:

float R;

};

                           

{  

public:

Column(float h=0,float r=0):                  

{}

float area(){return Circle::area()*2+                           ;}

float volume(){ return                   ;}

private:

float H;

};

void  main()

{

Column Col(20,100);

cout<<Col.area ()<<endl;

cout<<Col.volume ()<<endl;

}

3、补充完成如图图形绘制程序。

在鼠标点击的两点之间绘制弧线。补充完成相关代码:

void CSt1View::OnLButtonDown(UINT nFlags, CPoint point) 

{

                  ;

CView::OnLButtonDown(nFlags, point);

}

void CSt1View::OnLButtonUp(UINT nFlags, CPoint point) 

{

CRect Box;

                   =point.y ;

Box.top =p1.y;;

                   =p1.x;

Box.right =point.x;

CClientDC dc(                  );

dc.Arc (                  );

CView::OnLButtonUp(nFlags, point);

}

4、在划线处填写正确的表达式或语句,使程序的功能完整

#include <iostream.h>

class  CComplex 

{

private:

double real;

double imag;

public:

CComplex(double r=0, double i=0);

void Print();

                                    ;

};

CComplex::CComplex (double  r, double i):                  

void CComplex::Print()

{ cout <<real<<"+"<<imag<<"i"<<endl; }

CComplex CComplex::operator +(CComplex c)

{

                                    ;

temp.real = real + c.real;

temp.imag = imag + c.imag;

return temp;

}

void main( )

{

CComplex  a(10, 20), b(3, 4), c;

c = a+b;

cout << "c=";

c.Print();

}

5、在划线处填写正确的表达式或语句,使程序的功能完整

#include <iostream.h>

class Shape

{

public:

virtual void Area()=0;

}; 

class Circle:public Shape

{

public:

Circle (double r ); 

double GetR();

    virtual  void Area();

private:

double r;

};

Circle ::Circle (double r)

                     ;}

void Circle :: Area()

{

double a=3.14*r*r;

cout<<"The  area of the Circle is:"<<a<<endl;

}

double Circle::GetR()

{                       ; }

class Column:public Circle

{

public:

Column(double r,double h);

virtual  void Area();

private:

double h;

};

Column::Column(double r,double h):              

                   ; }

void Column::Area()

double s=2*3.14*Circle::GetR()*Circle::GetR()+2*Circle::GetR()*3.14*h;

cout<<"The  area of the Column is:"<<s<<endl;

}

void main()

{   

Shape *pt;

Circle Cir1(3);

pt=&Cir1;

pt-> Area ();

Column Col1(2,3);

pt=&Col1;

pt->Area ();

}

6、补充程序,输出图所示图形

已知编辑框“加数1”、“加数2”和“加数3”的关联变量为:m_add1m_add2m_add3,则点击“等于”按钮的代码为:

void CSt2Dlg::Onadd() 

{

                   ;

                   ;

                   ;

}

五、编程题

1、编写一函数实现判断某一正整数是否完数,调用该函数找出1000以内的所有完数。

2、声明一个复数类,利用运算符重载实现两个复数的相加。

3、编写一函数实现两个字符串的首尾相接,在主函数中调用该函数实现该功能。

4、定义抽象基类Shape,由它派生出3个派生类: Circle(圆形)Rectangle(矩形)Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给出。