一、 单选题(共20分)
1.下列那一项不是面向对象系统所包含的要素( )。
A重载 B对象 C类 D继承
2.在int a=3,*p=&a;中,*p的值是( )。
A变量a的地址值 B无意义 C变量p的地址值 D变量a的值
3.下面对模板声明正确的是( ):
A template<T> B template<class T1,T2>
C template<class T1,class T2> D template<class T1;class T2>
4.以下关于This指针的描述中,错误的是( ):
A this指针是指向对象的指针
B This指针是在使用对象引用成员函数时系统自动生成的
C This指针是指向成员函数的指针
D This指针可以在程序中显示使用
5.下面有关析构函数的描述正确是( )
A.析构函数可以带参数 B.析构函数可以有多个
C.析构函数在对象被撤消(销毁)之前执行 D.析构函数可以为虚函数
6.在( )情况下适宜采用inline定义内联函数。
A、 函数体含有循环语句 B、 函数代码少、频繁调用
C、 函数代码多、不常调用 D、函数体含有递归语句
7.若有int k=7,x=12;则其值为3的表达式为( )
A x%=(k%=5) B x%=(k-k%5)
C x%=k-k%5 D (x%=k)-(k%=5)
8.下面引用的定义中,错误的是( )
A. int I; int &j; j = I; B. int I=6; int &j = I;
C.char d; char &k=d; D.float I; const float &j=I;
9.有关类的友元描述错误的是( )
A.友元函数可以访问该类的所有成员。 B.友元可以提高程序的运行效率。
C.可以设置一个类为另一个类的友元。 D.友元关系可以继承。
10.如果某个类想使用一个静态成员变量统计其存在对象的个数,不用处理的是( )
A 构造函数 B 拷贝构造函数 C 析构函数 D 重载赋值运算符
11.下面叙述错误的是( )
A 基类的protected成员在派生类中仍然是protected
B 基类的protected成员在public派生类中仍然是protected的
C 基类的protected成员在private派生类中是private的
D 基类的protected成员不能被派生类的对象访问
12.cout代表( )
A 显示器 B 打印机 C 外部设备 D 磁盘
13.在键盘上输入字符串时,应该( )
A 使用单引号 B 使用双引号
C 不使用任何符号 D 以上均可
14.设置虚基类的目的是( )
A 简化程序 B 消除二义性 C 提高程序运行效率 D 减少目标代码
15.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )
A 与虚基类下面的派生类个数有关 B 多次 C 二次 D 一次
16.下列不是控件的是( )
A组合框 B编辑框 C对话框 D列表框
17.在下列DC中,客户区DC是( )
A CPainDC B CClientDC (C) CWindowDC (D)CMetaFileDC
18.不是Windows应用程序的资源的是( )
A加速键 B对话框 C菜单 D窗口
19.执行以下程序段后,输出结果为( )
int x=2,y=4;
int &z=x;
z=!y?2*x;2*y;
cout<<x;
A、6 B、4 C、2 D、8
20.在下列关于文档/视图结构应用程序的说法中,( )是错误的。
A、视图是用户界面,用于显示、打印文档中的数据,并管理与用户的交互
B、所有的Windows应用程序都采用这种结构
C、文档用于管理应用程序的数据
D、文档类是应用程序进行数据定义和初始化的地方
二. 填空题(20分)
1.在C++中,函数的参数有两种传递方式,它们是值传递和 。
2.拷贝构造函数使用 作为参数初始化创建中的对象。
3.在Visual C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型 ;在基类和派生类中,成员函数的覆盖是指派生类成员函数与在基类被覆盖的成员函数名、 、个数 和 均相同 。
4. 面向对象的程序设计有四大特征,它们是 。
5.派生类对基类继承控制访问有______种。
三. 程序阅读题(共25分)
1. 阅读下面程序,写出运行结果
#include <iostream.h>
class B {
int y;
public:
friend class A;
};
class A{
int x;
public:
A(int a,B &r, int b) {x=a; r.y=b;}
void Display( B & );
};
void A::Display(B &r)
{cout<<x<<" "<<r.y<<endl;}
void main( )
{ B Obj2;
A Obj1(33,Obj2,88);
Obj1.Display(Obj2);
}
2. 阅读下面程序,写出运行结果
#include <iostream.h>
class VEhicle
{ private:int color;
public:
void SetColor(int c) { color = c; }
void Move() {cout << "VEhicle moving !\n"; }
};
class Car:public VEhicle
{public:
void Move() {cout << "Car moving !\n";}
};
class SportsCar:public Car
{
public:
void Move() {cout<<"SportsCar moving !\n";}
};
void main(void)
{
VEhicle *vec;
vec = new VEhicle;
vec->Move();
delete vec;
vec = new Car;
vec->Move();
delete vec;
vec = new SportsCar;
vec->Move();
delete vec;
}
3.阅读下面程序,写出运行结果
#include <iostream.h>
void f2(int &x, int &y) {
int z = x; x = y; y = z;
}
void f3(int *x, int *y) {
int z = *x; *x = *y; *y = z;
}
int main() {
int x, y;
x = 10; y = 26;
cout << "x,y=" << x << ", " << y << endl;
f2(x, y);
cout << "x,y=" << x << ", " << y << endl;
f3(&x, &y);
cout << "x,y=" << x << ", " << y << endl;
x++; y--;
f2(y, x);
cout << "x,y=" << x << ", " << y << endl;
return 0;
}
4.阅读下面程序,写出运行结果
#include <iostream.h>
class Base
{
public:
Base(){ }
virtual void f()
{ cout<<"Base::f() called!"<<endl; }
virtual ~ Base()
{
cout<<"~Base()---";
f();
}
};
class De:public Base
{
public:
De(){ }
void f(){ cout<<"De::f() called!"<<endl;}
~ De() { cout<<"~Base()---"; f(); }
};
int main()
{
De d;
Base b=d,*pb=new De;
b.f();
pb->f();
delete pb;
}
5.阅读下面程序,写出运行结果:
#include <iostream.h>
class CSample{
char ch1,ch2;
public:
friend void set(CSample &s,char c1,char c2);
CSample(char a, char b){
ch1=a; ch2=b;
cout<<"CSample Constructor"<<endl; }
CSample(const CSample & rhs){
ch1=rhs.ch1;
ch2=rhs.ch2;
cout<<"CSample Copy-constructor"<<endl; };
CSample & operator=(const CSample& rhs){
ch1=rhs.ch1;
ch2=rhs.ch2;
cout<<"CSample Operator ="<<endl;
return *this; }
~ CSample() {
cout << "ch1=" << ch1 << ",ch2=" << ch2<< endl;}
};
void set(CSample &s,char c1,char c2)
{
s.ch1=c1;
s.ch2=c2;
}
CSample fun(CSample obj)
{
set(obj,'7','9');
return obj;
}
void main()
{
CSample obj1('7','8');
CSample obj2=obj1;
obj2=fun(obj1);
}
四、 名词解释(共15分)
1.API 2. 重载 3. 消息 4.MFC 5.浅拷贝
五.综合题(共30分)
1.解释下列代码,说明其完成的功能是什么?
void CRerView::OnDraw(CDC* pDC){
CRerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPen pen(PS_SOLID,2,RGB(0,255,0));
CBrush brush(RGB(244,0,0));
pDC->SelectObject(&pen);
pDC->SelectObject(&brush);
for(int i=0;i<pDoc->m_vPnt.size();i++)
pDC->Ellipse(pDoc->m_vPnt[i].x-20,pDoc->m_vPnt[i].y-20,
pDoc->m_vPnt[i].x+20,pDoc->m_vPnt[i].y+20);
}
2.根据注释在空白处填写适当内容。
#include <iostream.h>
class Location{
private:
int x,y;
public:
init(int initX,int initY);
int GetX()
{return x;}
int GetY()
{return y;}
};
void Location::init(int initX,int initY)
{ x=initX; y=initY; }
void main()
{ Location A1;
A1.init(20,90);
; //定义一个指向A1的引用rA1
; //用rA1在屏幕上输出对象A1的数据成员x和y的值
}
一.选择题
ADCCD BDADD ACCBD CBDDB
二.填空题
1.地址或指针或引用传递
2.引用
3.不同、参数个数、参数类型和返回值类型
4.抽象、封装、 继承 、 多态
5.3
三.程序阅读
1. 33 88
2.VEhicle moving !
VEhicle moving !
VEhicle moving !
3.x,y=10, 26
x,y=26, 10
x,y=10, 26
x,y=25, 11
4.
Base::f() called!
De::f() called!
~Base()---De::f() called!
~Base()---Base::f() called!
~Base()---Base::f() called!
~Base()---De::f() called!
~Base()---Base::f() called!
5.
CSample Constructor
CSample Copy-constructor
CSample Copy-constructor
CSample Copy-constructor
ch1=7,ch2=9
CSample Operator =
ch1=7,ch2=9
ch1=7,ch2=9
ch1=7,ch2=8
四.名词解释
1.API API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。
2. 重载
3. 消息
4.MFC
5.浅拷贝
五.
1. 鼠标左键按下时,记录鼠标位置。当窗口重绘时,从文档中获取点的数据。然后以这些点为中心,分别绘制绿色边界内部为红色的圆。
2. Location &rA1=A1;
cout<<rA1.GetX()<<rA1.GetY()<<endl;