您的位置:首页 > 其它

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

2010-11-28 21:00 344 查看
一、填空题
1、如果基类有带参数的构造函数,则派生类需采用 方式实现对基类成员的初始化。
2、在C++中,编译时的多态是通过 或 来实现的。
3、在派生类中对虚函数进行重新定义时,要保证名称、 和 必须与基类中的虚函数一致

4、当以保护方式继承时,基类中的公有成员成为派生类的 成员。
5、含有纯虚函数的类称为 。
6、Windows的位图有两种类型分别为: 位图和 位图。
7、对话框有两种类型分别是: 和 。
8、在Windows程序设计中,通过MFC提供的 可以实现图形、位图和文字的绘制。
9、MFC应用程序框架包括三类:单文档、 和 的应用程序。
10、与DOS程序不同,Windows程序是通过操作系统发送的 来处理用户输入的。
11、如果基类有带参数的构造函数,则派生类需采用 方式实现对基类成员的初始化。
12、含有纯虚函数的类称为 。
13、对话框有两种类型分别是: 和 。
14、定义一个运算符重载函数时,函数名必须以 开头。
二、选择题(共20分,每小题2分)
1、 在任何继承方式下,派生类的自有成员函数都不能访问原基类的某些成员,这些成员的原访问属性必然是_________。
A)公有或保护 B)保护或私有
C)私有或继承的私有 D)继承的私有或公有
2、 运行时的多态是通过基类中的虚函数实现的,虚函数可以是 。
A)普通成员函数 B)有元函数 C)静态成员函数 D)以上都可以
3、 下列运算符中,不能重载的运算符是 A 。
A) :: B) [ ] C) &&    D) >>
4、 当用户按下鼠标左键时,系统会发送 消息。
A)WM_LBUTTONDOWN B)WM_COMMAND
C)WM_LBUTTONUP D)WM_RBUTTONDBLCLK
5、 下列关于无模式对话框的说法中,正确的是
A)在退出对话框之前,对话框所在的应用程序不能继续执行
B)对话框弹出后,可以执行所在应用程序的其他操作
C)通过函数DoModal()进行创建、显示和关闭
D)不能通过Create()函数实现无模式对话框的创建
6、 下列关于菜单叙述错误的是 。
A)菜单是一系列命令的列表
B)点击菜单项可以向系统发送命令消息
C)可以通过控件工具栏创建新的菜单
D)在CMenu类中可以利用AppendMenu()函数添加菜单项
7、 下列函数中,不能重载的函数是 。
A)成员函数 B)非成员函数 C)构造函数 D)析构函数
8、 下列各个成员函数中,纯虚函数是 。
A)void fun(int)=0 B)virtual void fun( )
C)virtual void fun(int){ } D)virtual void fun( )=0
9、 下列关于派生类的描述中,错误的是 。
A)派生类至少有一个基类
B)一个派生类可以作为另一个派生类的基类
C)派生类的成员除了自身类的成员外,还包含了其基类的成员
D)派生类的成员可以访问其基类中的所有成员
10、下列那些不属于图形设备接口(GDI)抽象基类CGdiObject的派生类
A)CPen B)CBrush
C)CTime D)CFont
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_add1、m_add2和m_add3,则点击“等于”按钮的代码为:
void CSt2Dlg::Onadd()
{
;
;
;
}
五、编程题
1、编写一函数实现判断某一正整数是否完数,调用该函数找出1000以内的所有完数。
2、声明一个复数类,利用运算符重载实现两个复数的相加。
3、编写一函数实现两个字符串的首尾相接,在主函数中调用该函数实现该功能。
4、定义抽象基类Shape,由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐