VC-MFC试题复习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《VC程序设计》试卷1
一、单项选择题(每题1分,共20分)
1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数的次数为〔 B 〕
A、2
B、3
C、4
D、5
2、对于类中定义的成员,其隐含访问权限为〔 B 〕
A、protected
B、private
C、public
D、static
3、一个类的友元函数或友元类能够通过成员操作符访问该类的〔 B 〕
A、私有成员
B、所有成员
C、公用成员
D、保护成员
4、下面说法正确的选项是〔A 〕
A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、以下语句的运行结果为〔 D 〕
#include <iostream.h>
srtuct COMPLEX
{
int x;
int y;
} cNum[2]={1,3,2,7};
void main()
{
cout<< cNum[0].y*cNum[1] x<<endl;
}
A、3
B、2
C、21
D、6
6、类AB的缺省构造函数和析构函数是〔 A 〕
A、AB( )和~AB( )
B、AB(int)和~AB( )
C、AB( )和~AB(delete )
D、AB( )和int~AB( )
7、在C++中,假设对函数未加说明,则函数的隐含类型是〔 A 〕
A、int
B、double
C、void
D、char
8、已知类A是类B的友元,类B是类C的友元,则( D )
A、类A一定是类C的友元
B、类C一定是类A的友元
C、类C的成员函数可以访问类B的对象的任何成员
D、类A的成员函数可以访问类B的对象的任何成员
9、以下说法中正确的选项是( B )
A、类定义中只能说明函数成员的函数头,不能定义函数体
B、类中的函数成员可以在类体中定义,也可以在类体之外定义
C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中
D、在类体之外定义的函数成员不能操作该类的私有数据成员
10、以下不属于成员函数的是( B )
A、静态成员函数
B、友元函数
C、构造函数
D、析构函数
11、对于消息队列的描述正确的选项是〔 D 〕
A、在Windows中只有一个消息系统,即系统消息队列。
消息队列是一个系统定义的数据结构,用于临时存储消息。
B、系统可从消息队列将信息直接发给窗口。
另外,每个正在Windows下运行的应用程序都有自己的消息队列。
C、系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。
应用程序的消息对列中存储了程序的所有窗口的全部消息。
D、以上都正确
12、一个视图对象能连接〔 A 〕文档对象,一个文档对象能连接〔〕视图对象。
A、一个,多个
B、多个,一个
C、一个,一个
D、多个,多个
13、MFC类库中的类按层次关系可知,CStatic 的直接父类为( B )
A、CObject
B、CWnd
C、CcmdTarget
D、CFrameWnd
14、可以利用控件的〔 C 〕属性和Tab键顺序来为控件分组。
A、ID
B、Tab stop
C、Group
D、Caption
15、根据对话框的行为性质,对话框可以分为两类:〔 B 〕
A、对话框资源和对话框类
B、模式对话框和非模式对话框
C、对话框资源和对话框模板
D、消息对话框和模式对话框
16、以下控件中,〔 C 〕没有Caption属性。
A、按钮
B、群组框
C、编辑控件
D、静态控件
17、菜单项助记符前用〔 B 〕引导。
A、%
B、&
C、#
D、$
18、更新菜单状态的消息是〔 C 〕。
A、WM_COMMAND
B、UPDATE
C、ON_UPDATE_COMMAND_UI
D、INV ALIDATE
19、关于工具栏、菜单和加速键的关系,正确的说法是〔 C 〕。
A、工具按钮与菜单必须一一对应
B、工具按钮与加速键一一对应
C、工具按钮不必与菜单一一对应
D、菜单与加速键一一对应
20、使用GetWindowDC( )和GetDC( )获取的设备上下文在退出时,必须调用〔 A 〕释放设备上下文。
A、ReleaseDC( )
B、delete( )
C、DeleteDC( )
D、Detach( )
二、填空题(每空1分,共25分)
1、VC++开发环境中,int型数据占4个字节,short int占____2___个字节,long int 占_____4____个字节。
2、假设for循环的“头”为“for〔int i=1;i<10;i++〕”,并且在循环体中不会修改i的值,则循环体将被重复执行_______9_____次后结束。
3、两个函数的函数名____相同____,但参数的个数或对应参数的类型___不同
____时,则称为重载函数。
4、假设ch为char型变量,n为int型变量,则以下语句
ch = ’a’; n = 3; ch = ch + n;
cout<<” ch = ”<< ch;
执行的结果是___ch=d_______。
5、C++中函数的参数传递一种是按值传递,另一种是地址传递或___引用__传递。
6、C++运行时的多态性通过____虚函数____来实现,而编译时的多态性通过__函数重载___来实现。
7 只读成员函数用____const____关键字标识,内联成员函数用___inline____关键字标识。
8、class test{
public:
static int x;
};
test t1,t2; t1.x = 25;
程序运行到这里时,t2.x的值为_____25_______。
9、所有的文档类都派生于______CDocument__ _______,所有的视图类都派生于:______ CView _______。
10、为解决多继承中因公共基类而产生的二义性问题,C++语言提供了_虚基类___机制。
将公共基类声明为它以后,它在派生类中只产生一个实例。
11、在代码中,使用CWnd::____UpdateData________函数可实现控件与其成员变量之间的数据的传输。
12、列表框ClistBox类的成员函数______AddString________用来向列表框增加列表项,成员函数_____ResetContent_______用来清除列表项所有项目。
13、:________序列化_________ 是指将对象写入永久存储介质或者将对象从永久存储介质中读出的过程。
14、Windows程序中的消息有窗口消息、命令消息和__控件通知__消息三种类型。
15、MFC中的集合类包括数组、列表〔链表〕、映射〔顺序可变〕。
16、在进行绘图时,画刷用于指定图形的填充样式,___画笔______用于指定图形的边框样式。
三选择填空题〔每空1分,共15分〕
1、如果在基类和派生类中都包含其他类的对象〔即有对象成员〕,则在创建派生类的对象时,首先执行⑴A的构造函数,接着执行⑵C 的构造函数,然后执行__ _⑶_B__的构造函数,最后才执行⑷ D 的构造函数。
A、基类的对象成员
B、派生类的对象成员
C、基类
D、派生类
2、[5] B 代表窗口客户区的显示设备上下文, [6]C 代表整个窗口的显示设备上下文。
A、CPaintDC
B、CClientDC
C、CWindowDC
D、CMetaFileDC
3、消息循环的处理过程如下:
⑺ A 函数不断侦察应用程序的消息队列,假设队列为空,该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它拷贝到msg结构变量中,同时该函数返回TRUE;得到消息msg后,⑻ B 把来自键盘的命令翻译成WM_XXX消息命令形式。
⑼ E 函数通知Windows把每个消息分发给相应的窗口函数。
应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数。
A、GetMessage( )
B、translateMessage( )
C、PostMessage( )
D、SendMessage( )
E、DispatchMessage( )
4、常用的CButton类的成员函数中:⑽ A 获得一个按钮控件的选中、选择和聚焦状态;⑾ D 得到一个按钮的选中状态;⑿ C 设置一个按钮的
选中状态。
A、GetState( )
B、SetState( )
C、SetCheck( )
D、GetCheck( )
E、GetButtonStyle( )
5、滚动条类CScrollBar的成员函数规定了滚动条的操作。
设置滚动条的范围使用⒀ C 函数,设置滚动块的位置使用⒁E 函数,获取滚动块的当前位置使用⒂ F 函数。
A、SetPos
B、SetRange
C、SetScrollRange
D、GetPos
E、SetScrollPos
F、GetScrollPos
G、GetScrollRange
四写出以下程序的运行结果〔每题5分,共15分〕
1、.#include<iostream.h>
class A{
int *a;
public:
A(int x){ a=new int(x); cout<<"*a="<<*a<<endl; delete a; } };
void main()
{
A x(3), *p;
p=new A (5);
delete p;
}
*a=3
*a=5
2、class test{
private:
int num;
public:
test();
int GetNum() { return num;}
~test();
};
test::test(){ num=0; }
test::~test()
{ cout<<″Destructor is active″<<endl; }
void main()
{ test x[3];
cout<<″Exiting main″<<endl;
}
Exiting main
Destructor is active
Destructor is active
Destructor is active
3、 #include<iostream.h>
class A {
public:
virtual void fun()
{ cout<<"I'm class A"<<endl; }
};
class B: public A{
public:
void fun()
{ cout<<"I'm class B"<<endl; }
};
class C: public B{
public:
void fun()
{ cout<<"I'm class C"<<endl; }
};
void main()
{
A a,*pA=&a;
pA->fun();
B b;
pA=&b;
pA->fun();
C c;
a=c;
a.fun();
A &aRef=c;
aRef.fun();
}
I'm class A
I'm class B
I'm class A
I'm class C
五、完成程序题〔本大题共3小题,每空2分,共12分〕。
根据题目要求,完成程序填空。
1、在下面程序的横线处填上适当字句,使该程序执行结果为6。
#include <iostream.h>
class base{
int X;
public:
____innit(int a){X=a;}_[1]___//为X置值
__int GetNum(){return X;}_[2]__//取X值
};
void main()
{
base test;
test.init(6);
cout<<test.GetNum();
}
2、一个类的头文件如下所示,主程序中产生对象T,且T.num=10,并使用Print()函数输出这个对象的值。
class test{
private:
int num;
public:
test(int);
void Print();
};
test::test(int n){ num=n; }
void test::Print(){ cout<<num<<endl; }
#include<iostream.h>
void main()
{ __[3]_test T(10)__;
__[4]__T.print()_;
}
3、在下面横线处填上适当字句,完成类中成员函数的定义。
class A{
int * a;
public:
A(int x=0) {
a=_ [5]_ new int〔x〕____;//用x初始化a所指向的动态对象
}
~A(){__ [6] delete a;_ _;}//释放动态存储空间
};
六、程序设计题(1题4 分,2题9 分,共13分)
1、简单的计算程序界面如以下图所示,操作数1对应编辑框控件的ID为IDC_EDIT1,对应值类型的成员变量m_op1(int);操作数2对应编辑框控件的ID 为IDC_EDIT2,对应值类型的成员变量m_op2(int);计算结果对应的编辑框控件的ID 为IDC_EDIT3,对应值类型的成员变量m_result(int)。
假设输入的数为整数,加法按钮的功能是将两操作数相加,并将结果在对应的编辑框IDC_EDIT3显示出来。
写出加法按钮对应的代码。
void CExDlg::OnButton1()
{
UpdateDate(TRUE);
m_result = m_op1 + m_op2;
UpdateDate(FALSE);
}
void CExDlg::OnButton2()
{
UpdateDate(TRUE);
m_result = m_op1 - m_op2;
UpdateDate(FALSE);
}
2、为学员信息设计一个类CStudent,包含:学号、、出生日期、家庭住址、班级,并使该类可以实现串行化。
请写出可以实现要求的CStudent.h和CStudent.cpp文件的内容
//CStudent.h
class CStudent :public CObject { 1分
public:
CString Num;
CString Name;
CTime Birth;
CString Address;
CString Grade; 2分
DECLARE_SERIAL(CStudent) // 使对象可串行化1分
virtual void Serialize( CArchive & ar ); //重载串行化函数1分};
CStudent.cppIMPLEMENT_SERIAL(CStudent ,CObject, 0) 1分
void CStudent:Serialize(CArchive & ar)
{ CObject::Serialize(ar); 1分
if ( ar.IsStoring() )
{ ar<<Num<<Name<< Birth <<Address<<Grade; 1分
}
else
{ ar>>Num>>Name>> Birth >>Address>>Grade; 1分
}
}
《VC++程序设计》试卷2
一、单项选择题(每题1分,共20分)
1、假定AB为一个类,则执行“AB a(4),b(3),*p[2];”语句时,自动调用该类构造函数的次数为〔 A 〕
A、2
B、3
C、4
D、5
2、对于结构中定义的成员,其隐含访问权限为〔C〕
A、protected
B、private
C、public
D、static
3、在面向对象编程中,对象的抽象集合称为〔 C 〕。
A、对象
B、集合
C、类
D、实例
4、下面说法正确的选项是〔 A 〕
A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、实现运行时的多态性,必须通过〔 A 〕来完成。
A、虚函数
B、重载函数
C、构造函数
D、析构函数
6、类CNum的缺省构造函数和析构函数是〔 A 〕
A、CNum ( )和~CNum ( )
B、CNum (int)和~CNum( )
C、CNum ( )和~CNum (delete )
D、CNum ( )和int~CNum ( )
7、在类外定义类的成员函数时,应当使用〔 B 〕来标识该函数为特定类的成员。
A、:
B、::
C、->
D、this
8、已知类A是类B的友元,类B是类C的友元,则( D )
A、类A一定是类C的友元
B、类C一定是类A的友元
C、类C的成员函数可以访问类B的对象的任何成员
D、类A的成员函数可以访问类B的对象的任何成员
9、下面( A )是函数重载。
A、void play(int) 和void play(float)
B、play( ) 和~play()
C、void play(int) 和int play(int)
D、void play( ) 和int play( )
10、以下说法中正确的选项是( B )
A.类定义中只能说明函数成员的函数头,不能定义函数体。
B.类中的函数成员可以在类体中定义,也可以在类体之外定义。
C.类中的函数成员在类体之外定义时必须要与类声明在同一文件中。
D.在类体之外定义的函数成员不能操作该类的私有数据成员。
11、Windows操作系统主要基本内核元件中,_______支持与操作系统密切相关的功能:如进程加载、文本切换、文件I/O以及内存管理、线程管理等。
〔 B 〕
A、GDI
B、KERNEL
C、USER
D、以上都不是。
12、一个视图对象能连接〔〕文档对象,一个文档对象能连接〔 A 〕视
图对象。
A、一个,多个
B、多个,一个
C、一个,一个
D、多个,多个
13、所有的控件都是( B ) 类的派生类,都可以作为一个特殊的窗口来处理。
A、CView
B、CWnd
C、CWindow
D、CDialog
14、设置编辑控件的文本内容,可使用函数( A )
A、SetWindowText( )
B、SetSel( )
C、ReplaceSel( )
D、GetWindowText( )
15、根据对话框的行为性质,对话框可以分为两类:〔 B 〕
A、对话框资源和对话框类
B、模式对话框和非模式对话框
C、对话框资源和对话框模板
D、消息对话框和模式对话框
16、以下控件中,〔 C 〕没有Caption属性。
A、按钮
B、群组框
C、编辑控件
D、静态控件
17、菜单项助记符前用〔 B 〕引导。
A、%
B、&
C、#
D、$
18、MFC中的集合类包括〔 C 〕。
A、对象、列表和映射
B、数组、列表和对象
C、数组、列表和映射
D、数组、列表和链表
19、文档负责将数据存储到永久存储介质中,通常是磁盘文件或数据库,存取过程称为〔 B 〕。
A、文件访问
B、串行化
C、文件读写
D、格式化
20、以下对模板的声明,正确的选项是〔 D 〕。
A、template<T>
B、template<class T1;class T2>
C、template<class T1,T2>
D、template<class T1,class T2>
二、填空题(每空1分,共25分)
1、VC++开发环境中,char型数据占 1 个字节,int型数据占__4__个字节,double型数据占____8__个字节。
2、假设for循环的“头”为“for〔int i=1;i<10;i++〕”,并且在循环体中不会修改i的值,则循环体将被重复执行______9______次后结束。
3、两个函数的函数名相同,但参数的个数或对应参数的类型不同时,则称为
函数重载。
4、假设ch为char型变量,n为int型变量,则以下语句
n = 65; ch = n+3;
cout<<” ch = ”<< ch;
执行的结果是___ ch =D_______。
5、组合框与列表框用途类似,它是由____列表框__和___编辑框__功能组合而成。
6、DC〔设备上下文〕是Windows应用程序与设备驱动程序和输出设备之间的接口。
7、如果一个类中含有纯虚函数,则称该类为__抽象基类____
8、如果类的所有对象共享一个成员,则称该成员为___静态成员___
9、如果类中的成员只能被本类的成员函数和友元函数访问,则这些成员的访问权限为_____私有___ _;如果类中的成员能够被类外的函数访问,则这些成员的访问权限为:______公有____。
10、为解决多继承中因公共基类而产生的二义性问题,C++语言提供了___虚基
类_____机制。
将公共基类声明为它以后,它在派生类中只产生一个实例。
11、Windows程序中的消息有___窗口消息_____、__命令消息___和___控件通知
消息____三种类型。
11、用户按下键盘按键并放开的过程中,将产生至少三条消息:
_____WM_KEYDOWN_______、___WM_KEYUP________和
__WM_CHAR__________。
13、单项选择按钮初始化要使用函数如下:
void CheckRadioButton(IDC_RADIO1, IDC_RADIOn , IDC_RADIOm)
其功能的具体描述为:_从IDC_RADIO1到IDC_RADIOn中设置IDC_RADIOm _____ 14、列表框分为单项选择列表框和多项选择列表框两种,单项
选择列表框中任一时刻只能选择一项,多项选择列表框则可以选取
多项。
三选择填空题〔每空1分,共15分〕
1、如果在基类和派生类中都包含其他类的对象〔即有对象成员〕,则在创建派生
类的对象时,首先执行A⑴的构造函数,接着执行⑵C 的构造
函数,然后执行__ _⑶_B__的构造函数,最后才执行⑷ D 的构造函数。
A、基类的对象成员
B、派生类的对象成员
C、基类
D、派生类
2、所有的文档类都派生于[5] C ,所有的视图类都派生于 [6] A 。
A、CView
B、C Window
C、CDocument
D、CFormView
3、[7] C 包括键盘和鼠标的输入。
这一类消息首先放在系统消息队列中,
然后由Windows将它们送入应用程序消息队列中,由程序来处理消息; A [8] 用来与Windows的控制对象,如列表框、按钮、复选框等进行双向通信。
当用
户在列表框中改动当前选择或改变了复选框的状态时发出此类消息。
A、系统消息
B、用户消息
C、输入消息
D、控制消息
4、使用[9] 获取的设备上下文在退出时,必须调用ReleaseDC( )释放设
备上下文。
A、GetWindowRect( )
B、GetDC( )
C、BeginPaint〔〕
D、GetClientRect( )
5、常用的CButton类的成员函数中: A ⑽获得一个按钮控件的选中、选择
和聚焦状态;⑾ D 得到一个按钮的选中状态;⑿ C 设置一个按钮的
选中状态。
A、GetState( )
B、SetState( )
C、SetCheck( )
D、GetCheck( )
E、GetButtonStyle( )
6、滚动条类CScrollBar的成员函数规定了滚动条的操作。
设置滚动条的范围使
用⒀ C 函数,设置滚动块的位置使用⒁ E 函数,获取滚动
块的当前位置使用⒂ F 函数。
A、SetPos
B、SetRange
C、SetScrollRange
D、GetPos
E、SetScrollPos
F、GetScrollPos
G、GetScrollRange
四写出以下程序的运行结果〔每题5分,共20分〕
1、 #include<iostream.h>
class B{
public:
static int num;
};
int B:: num=100;
void main()
{ B b1, b2;
cout<<b1.num <<’ ’;
b1.num+=25;
cout<<b2.num <<endl;
}
100 125
2、 #include<iostream.h>
class A {
public:
virtual void fun()
{ cout<<"I'm class A"<<endl; } };
class B: public A{
public:
void fun()
{ cout<<"I'm class B"<<endl; } };
class C: public B{
public:
void fun()
{ cout<<"I'm class C"<<endl; } };
void main()
{
A a,*pA=&a;
pA->fun();
B b;
pA=&b;
pA->fun();
C c;
a=c;
a.fun();
A &aRef=c;
aRef.fun();
}
3、 class test{
private:
int num;
float fl;
public: test( );
int getInt( ){ return num; }
float getFloat( ){ return fl; }
~test( );
};
test ∷ test( )
{ cout << "Initalizing default" << endl;
num=0; fl=0.0;
}
test ∷~test( )
{ cout << "Desdtructor is active" << endl;}
int main( )
{ test array[2];
cout<<array[1].getInt()<<" "
<<array[1].getFloat()<<endl;
return 0;
}
4. int main( )
{ int num=50;
int & ref=num;
ref=ref+10
cout << "num=" << num << endl;
num=num+40;
cont << "ref=" << ref << endl;
return 0;
}
五、程序设计题(每题10 分,共20分)
1、以下shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。
请从shape类派生三角形类(triangle)、矩形类〔rectangle〕、并给出具体的求面积函数。
class shape{
public:
virtual float area( )=0
};
float total(shape *s[ ],int n)
{ float sum=0.0;
for(int i=0; i<n: i++)
sum=sum+i.area( );
return sum;
}
2、创建一个记录通讯录内容的新类Caddrlist,包含:、住址、、出生日期,并使该类可以实现串行化。
请写出可以实现要求的CAddrlist.h和CAddrlist.cpp 文件的内容
2005—2006学年第一学期
《VC++程序设计》试题答案及评分标准
二、填空题(每空1分,共25分)
1、1、4 、8
2、9
3、函数重载
4、ch=D
5、列表框、编辑框
6、DC〔设备上下文〕
7、抽象基类
8、静态成员9、私有、公有〔或者private 、public〕10、虚基类
11、窗口消息、命令消息、控件通知消息〔顺序可变〕
12、WM_KEYDOWN,WM_CHAR,WM_KEYUP
13、从IDC_RADIO1到IDC_RADIOn,中设置IDC_RADIOm为默认
14、单项选择列表框、多项选择列表框、单项选择列表框、多项选择列表框
四写出以下程序的运行结果〔每题5分,共20分〕
1、 100 125
2、 I'm class A
I'm class B
I'm class A
I'm class C
3、 Initalizing default
Initalizing default
0 0
Desdtructor is active
Desdtructor is active
4、num=60
ref=100
五、程序设计题(每题10 分,共20分)
1、
#include<math.h> 1分
class triangle:public shape{ 1分
public:
virtual float area( )
{
float s=(a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c)); 3分
}
private:
float a,b,c; 1分
};
class rectangle:public shape{ 1分
public:
virtual float area( )
{
return a*b; 2分
}
private:
float a,b; 1分
};
2、
//Addrlist.h文件内容:
class CAddrlist : public CObject { 1分
public:
CString Name;
CString Address;
CString Tel;
CTime Birth;
CAddrlist(); 3分
DECLARE_SERIAL(CAddrlist) // 使对象可串行化1分
virtual void Serialize( CArchive & ar ); //重载串行化函数1分
};
Addrlist.cpp文件内容:IMPLEMENT_SERIAL(CAddrlist,CObject, 0) 1分void CAddrlist::Serialize(CArchive & ar)
{ CObject::Serialize(ar); 1分
if ( ar.IsStoring() )
{ ar<<Name<<Tel<<Address<<Birth; 1分
}
else
{ ar>>Name>>Tel>>Address>>Birth; 1分
}
}
《VC++程序设计》试卷3
一、单项选择题(每题1分,共20分)
1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用
该类构造函数的次数为〔〕
A、2
B、3
C、4
D、5
2、对于类中定义的成员,其隐含访问权限为〔〕
A、protected
B、private
C、public
D、static
3、一个类的友元函数或友元类能够通过成员操作符访问该类的〔〕
A、私有成员
B、所有成员
C、公用成员
D、保护成员
4、下面说法正确的选项是〔〕
A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、以下语句的运行结果为〔〕
#include <iostream.h>
srtuct COMPLEX
{
int x;
int y;
} cNum[2]={1,3,2,7};
void main()
{
cout<< cNum[0].y*cNum[1] x<<endl;
}
A、6
B、2
C、21
D、3
6、类AB的缺省构造函数和析构函数是〔〕
A、AB( )和~AB( )
B、AB(int)和~AB( )
C、AB( )和~AB(delete )
D、AB( )和int~AB( )
7、在C++中,假设对函数未加说明,则函数的隐含类型是〔〕
A、int
B、double
C、void
D、char
8、已知类A是类B的友元,类B是类C的友元,则( )
A、类A一定是类C的友元
B、类C一定是类A的友元
C、类C的成员函数可以访问类B的对象的任何成员
D、类A的成员函数可以访问类B的对象的任何成员
9、以下说法中正确的选项是( )
A、类定义中只能说明函数成员的函数头,不能定义函数体
B、类中的函数成员可以在类体中定义,也可以在类体之外定义
C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中
D、在类体之外定义的函数成员不能操作该类的私有数据成员
10、以下不属于成员函数的是( )
A、静态成员函数
B、友元函数
C、构造函数
D、析构函数
11、对于消息队列的描述正确的选项是〔〕
A、在Windows中只有一个消息系统,即系统消息队列。
消息队列是一个系统定义的数据结构,用于临时存储消息。
B、系统可从消息队列将信息直接发给窗口。
另外,每个正在Windows下运行
的应用程序都有自己的消息队列。
C、系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。
应用程序的消息对列中存储了程序的所有窗口的全部消息。
D、以上都正确
12、一个视图对象能连接〔〕文档对象,一个文档对象能连接〔〕视图对象。
A、多个,多个
B、多个,一个
C、一个,一个
D、一个,多个
13、MFC类库中的类按层次关系可知,CStatic 的直接父类为( )
A、CObject
B、CWnd
C、CCmdTarget
D、CFrameWnd
14、可以利用控件的〔〕属性和Tab键顺序来为控件分组。
A、ID
B、Group
C、Tab stop
D、Caption
15、根据对话框的行为性质,对话框可以分为两类:〔〕
A、对话框资源和对话框类
B、模式对话框和非模式对话框
C、对话框资源和对话框模板
D、消息对话框和模式对话框
16、以下控件中,〔〕没有Caption属性。
A、按钮
B、群组框
C、编辑控件
D、静态控件
17、菜单项助记符前用〔〕引导。
A、%
B、#
C、&
D、$
18、更新菜单状态的消息是〔〕。
A、WM_COMMAND
B、UPDATE
C、ON_UPDATE_COMMAND_UI
D、INV ALIDATE
19、关于工具栏、菜单和加速键的关系,正确的说法是〔〕。
A、工具按钮与菜单必须一一对应
B、工具按钮与加速键一一对应
C、工具按钮不必与菜单一一对应
D、菜单与加速键一一对应
20、使用GetWindowDC( )和GetDC( )获取的设备上下文在退出时,必须调用〔〕释放设备上下文。
A、DeleteDC( )
B、delete( )
C、ReleaseDC( )
D、Detach( )
二、选择填空题〔每空1分,共20分〕
1、如果在基类和派生类中都包含其他类的对象〔即有对象成员〕,则在创建派生类的对象时,首先执行[1] 的构造函数,接着执行 [2] 的构造函数,然后执行___[3]___的构造函数,最后才执行[4]的构造函数。
A、基类的对象成员
B、派生类的对象成员
C、基类
D、派生类
2、[5] 代表窗口客户区的显示设备上下文, [6] 代表整个窗口的显示设备上下文。
A、CPaintDC
B、CClientDC
C、CWindowDC
D、CMetaFileDC
3、消息循环的处理过程如下:
[7] 函数不断侦察应用程序的消息队列,假设队列为空,该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它拷贝到msg结构变量中,同时该函数返回TRUE;得到消息msg后, [8] 把来自键盘的命令翻译成WM_XXX消息命令形式。
[9] 函数通知Windows把每个消息分发给相应的窗口函数。
应用程序并不直接调用窗口函数,而由Windows根据消息
去调用窗口函数,因此,窗口函数经常被称为回调函数。
A、GetMessage( )
B、translateMessage( )
C、PostMessage( )
D、SendMessage( )
E、DispatchMessage( )
4、常用的CButton类的成员函数中:[10]获得一个按钮控件的选中、选择和聚焦状态;[11]得到一个按钮的选中状态;[12]设置一个按钮的选中状态。
A、GetState( )
B、SetState( )
C、SetCheck( )
D、GetCheck( )
E、GetButtonStyle( )
5、滚动条类CScrollBar的成员函数规定了滚动条的操作。
设置滚动条的范围使用[13] 函数,设置滚动块的位置使用[14] 函数,获取滚动块的当前位置使用[15] 函数。
A、SetPos
B、SetRange
C、SetScrollRange
D、GetPos
E、SetScrollPos
F、GetScrollPos
G、GetScrollRange
6、在进行绘图时,[16] 用于指定图形的填充样式,___[17]___用于指定图形的边框样式。
A、画笔
B、画刷
C、区域
D、位图
7、列表框ClistBox类的成员函数___[18]__用来向列表框增加列表项,成员函数___[19]__用来清除列表项所有项目,成员函数___[20]__用来返回列表框的列表项的总数。
A、AddString
B、DeleteString
C、ResetContent
D、FindString
E、GetCurSel
F、GetCount
三、程序设计题(共60分)
1、〔10分〕已知点类的定义如下:
class Point{
……
private:
double x,y;
};
分别用成员函数和友元函数实现计算两点间的距离,函数名为distance。
2、〔15分〕要求计算立方体和圆柱2个几何体的外表积和体积。
可以抽象出一个公共的基类Base,把它作为抽象类,在该类内定义求外表积和体积的纯虚函数〔抽象类本身是没有外表积和体积可言的〕。
由这个抽象类派生出描述立方体和圆柱的2个具体类,在这2个类中都有计算外表积和体积的函数的自己版本。
请用C++语言定义上述类等级。
3、〔10分〕简单计算程序界面如以下图所示,x对应编辑框控件的ID为IDC_EDIT1,对应值类型的成员变量m_x(double);y对应编辑框控件的ID为IDC_EDIT2,对应值类型的成员变量m_y(double);z对应的编辑框控件的ID 为IDC_EDIT3,对应值类型的成员变量m_z(double)。
乘法按钮的功能是将x,y相乘,除法按钮的功能是将x,y相除,并将结果在z对应的编辑框IDC_EDIT3显示出来。
写出乘法按钮和除法按钮对应的代码。
〔10分〕
void CExDlg::OnButtonMul( ) // 乘法按钮
{
}
void CExDlg::OnButtondIV( ) // 除法按钮
{
}
4、〔10分〕设计一个基于对话框的应用程序,如以下图所示。
要求:单击Color 按钮,能弹出通用颜色对话框选取颜色,并用该颜色显示:This is a color example。
已知:Example组合框的ID为:IDC_DISPLAY。
写出Color按钮的BN_CLICKED消息处理函数。
void CXT6_4Dlg::OnColor()
{
}
5、〔10分〕为学员信息设计一个类CStudent,包含:学号、、出生日期、家庭住址、班级,并使该类可以实现串行化。
请写出可以实现要求的CStudent.h和CStudent.cpp文件的内容。
6、如何定义ODBC的数据源?试表达其过程。
〔5分〕
2005—2006学年第2学期
《VC++程序设计》试题答案及评分标准
二、选择填空题〔每空1分,共20分〕
三、程序设计题(共60分)
1、〔10分〕
用成员函数实现〔5分〕
double Point::distance( const Point &a )
{ double dx,dy;
dx = x-a.x;
dy = y-a.y;
return sqrt( dx*dx + dy*dy );
}
用友元函数实现〔5分〕
double distance( const Point &a, const Point &b )
{ double dx,dy;
dx = a.x-b.x;
dy = a.y-b.y;
return sqrt( dx*dx + dy*dy );
}
2、每个类定义5分,共15分
const double PI=3.14159;
class Base{
public:
virtual double area() const=0;
virtual double volume() const=0;
};
class Cube:public Base{
public:
Cube(double l=10)
{ length=l>0 ? l : 10; }
double area() const
{ return 6*length*length; }
double volume() const
{ return length*length*length; }
private:
double length;
};
class Cylinder:public Base{
public:
Cylinder(double r=10, double h=5)
{ radius=r>0 ? r : 10;
height=h>0 ? h : 5;
}
double area() const
{ return 2*PI*radius*radius+2*PI*radius*height; }
double volume() const
{ return PI*radius*radius*height; }
private:
double radius;
double height;
};
3、 void CExDlg::OnButtonMul() 〔5分〕
{ UpdateDate(TRUE);
m_z = m_x * m_y;
UpdateDate(FALSE);
}
void CExDlg::OnButtonDiv() 〔5分〕
{ UpdateDate(TRUE);
if ( m_y == 0 )
{ MessageBox( “除数不能为0!”);
return;
}
m_z = m_x / m_y;
UpdateDate(FALSE);
4、void CXT6_4Dlg::OnColor()
{
// TODO: Add your control notification handler code here
COLORREF m_cTextColor;
CColorDialog Dlg;
if ( Dlg.DoModal()==IDOK )
{
m_cTextColor=Dlg.GetColor();
CWnd * pWnd=GetDlgItem(IDC_DISPLAY);
CDC * pDC=pWnd->GetDC();
CRect rcDisplay;
pWnd->GetClientRect(rcDisplay);
pDC->SetTextColor(m_cTextColor);
CString s="This is a color example";
DC->TextOut(rcDisplay.right/2-80,rcDisplay.bottom/2-5,s);
}
}
5、 //CStudent.h
class CStudent :public CObject { 1分
public:
CString Num;
CString Name;
CTime Birth;
CString Address;
CString Grade; 2分
DECLARE_SERIAL(CStudent) // 使对象可串行化1分
virtual void Serialize( CArchive & ar ); //重载串行化函数1分
};
CStudent.cppIMPLEMENT_SERIAL(CStudent ,CObject, 0) 1分
void CStudent:Serialize(CArchive & ar)
{ CObject::Serialize(ar); 1分
if ( ar.IsStoring() ) 1分
{ ar<<Num<<Name<< Birth <<Address<<Grade; 1分
}
else
{ ar>>Num>>Name>> Birth >>Address>>Grade; 1分
}
}
6、〔5分〕打开控制面板,双击ODBC图标,进入ODBC数据源管理器。
定义用户DSN
的步骤如下:
(1)单击【添加】按钮,弹出“创建新数据源”对话框。
(2)为新的数据源选择数据库驱动程序。
并单击【完成】按钮。
(3)在“ODBC Microsoft Access 97 安装”对话框中,应为该数据源起一个简短的名称。
并在下一个编辑框中输入对该数据库的说明。
(4)指定数据库的位置。
单击【选取】按钮,然后指定所创建的Access数据库。
(5)单击【确定】按钮,刚刚创建的用户数据源被添加在“ODBC数据源管理器”。