46.如果类中所有成员并定义时都没有使用关键字public、private和pratected,则所有成员默认定义为(B)
A.PublicB.Private
C.PratectedD.Static
47.关于析构函数,下列说法不正确的是(B)
A.类中有且仅有一个析构函数
B.析构函数没有返回值
C.析构函数在对象消失时被自动执行
D.析构函数可以没有参数
48.当在使用类模版时,类的模版本身被实例化成了一个具体的(A)
A.类实B.例模版C.类D.对象
49.通过调用(C)函数,能够设置本地计算机的时间
A.SetSystenTime
B.SetSystemtime
C.SetLocalTime
D.SetLocalTime
50.说明对象或变量初始化后不会被修改的关键字是(B)
A.PublicB.ConstC.StaticD.Inline
51.下列关于虚函数的描述中,正确的是(A)
A.虚函数不得是静态成员函数
B.只能通过指针或引用调用虚函数
C.从虚基类继承的函数都是虚函数
D.抽象类中的成员函数都是虚函数
52.在C++语言中,结构体是关于关键字(C)声明的类
A.ClassB.StaticC.StructD.Private
53.每一个MFC程序实例有多少个派生类的实例化对象(C)
A.一个或多个B.两个
C.有且只有一个D.多个
54.程序类对菜单命令的响应顺序是(D)
A.doc->view->Frame->app
B.View->Frame->doc->app
C.Frame->doc->View->app
D.View->doc->Frame->app
55.利用Create函数创建非模态对话框时,还需要调用什么函数将这个对话框显示出来(A)
A.Showwindow
B.Showcreate
C.MessageBox
D.UpdateWindow
简答题
1.在VC++中,工程与各种源文件之间是什么关系?
VC++吧要完成的某个程序设计任务称之为工程,要进行程序设计先要建立一个工程,即首先要搭建一个空框架。
要完成具体的任务还必须往那个工程里添加源文件(如:
cpp文件.c文件.h文件等)。
工程管理添加在工程下的各种源文件,这些源文件有机会结合,通过翻译和连接生成课执行文件。
2.类的虚拟性和派生性在程序设计中各起到什么作用?
类的派生性的作用:
派生性能从一个已经存在的类(基类)派生出一个新的类(派生类),派生类可以继承基类的部分或全部数据成员和成员函数,再增加新的数据成员和成员函数。
从而减少了程序设计的工作量,提高了程序代码的重要性。
类的虚拟性的作用:
在windows程序设计中,为实现某个功能,系统预先设置了一序列的函数调用流程。
3.消息结构体中最重要的数据成员是那几个?
简述消息附加参数的作用。
消息结构体的定义为:
TypedefstructtagMSG
{
HWNDhwnd;
UINTmessage;
WPARAMwParam;
LPARAMlParam;
DWORDtime;
POINTpt;
}MSG;
其中最重要的3个数据成员是message,wParam和lParam。
wParam和lParam代表消息的附加参数,有时消息处理的过程中需要这两个参数,如WM_CHAR消息标识符(字符消息标识符),当按下键盘上的某个字符键时便会产生这一消息标识符,但按下所有字符键都会产生WM_CHAR消息标识符,在字处理程序仅靠WM_CHAR是无法确认按下那个字符键的。
WM_CHAR消息标识符所带的附加参数wParam中便存放了字符信息,具体来说wParam中存放了字符的ASCII码,据此以判断按下了那个字符键。
4.模态对话框和非模态对话框的区别?
(1)模态对话框,弹出后该程序的其它窗口就呈不可用的状态,原来程序暂停执行,直到这个模态窗口关闭后才回到原来程序继续。
(2)非模态的就是直接显示出来,然后原来的程序继续执行下面的语句,而且其它窗口也呈可用状态。
5.MFC消息映射机制的具体实现方法。
在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。
在消息映射表中,消息与对应的消息处理函数指针是成对出现的。
某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类对应的静态表中。
当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类能否处理此消息。
如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。
6.C++窗口类对象与窗口的区别?
C++窗口类对象与窗口并不是一回事,它们间唯一的关系是C++窗口类对象内部定义了一个窗口句柄变量,保存了与这个C++窗口类对象相关的那个窗口的句柄。
窗口销毁时,与之对应的C++窗口类对象销毁与否,要看其生命周期是否结束。
但C++窗口类对象销毁时,与之相关的窗口也将销毁。
7.静态成员函数和非静态成员函数的区别?
静态成员函数和静态成员变量属于类本身,在类加载的时候,即为它们分配了空间,所以可以通过类名:
:
函数名或类名:
变量名来访问。
而非静态成员函数和非静态成员属于对象的方法和数据,也就是应该首先产生类的对象,然后通过类的对象去引用。
8.构造函数和析构函数的作用是什么?
什么时候需要自己定义构造函数和析构函数?
构造函数的作用:
用于新建对象的初始化工作。
析构函数的作用:
用于在撤销对象前,完成一些清理工作,比如:
释放内存等。
每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。
9.为什么一般把快捷键和图标资源的ID定义为与菜单的ID相同?
图标资源是以位图形式保存的,这一位图资源会放在工程的那个文件夹中?
把快捷键和图标资源的ID定义为与菜单的ID相同,原因是在用LoadFrame()函数装载菜单时也可以同时装载这两种资源,图标资源是以位图形式保存的,这一位图资源会放在工程的资源文件夹中。
10.3.什么是简单继承?
什么是多重继承?
在软件开发过程中,继承有什么好处?
(1)简单继承:
派生类的基类只有一个的继承方法。
(3分)
(2)多重继承:
派生类的基类同时有多个时的继承方法。
(3分)
(3)继承的好处:
由于可以利用已有的软件基础来进行新的软件开发,所以能提高软件开发效率和软件质量。
11.AppWiard和ClassWizard的作用是什么?
AppWiard负责创建应用程序框架,ClassWizard可以让程序员以交互式方式网应用程序框架里添加各种资源、消息和处理函数等。
12.API应用程序中WinMain()函数和WndProc()函数的作用分别是什么?
WinMain()函数负责建立窗口和建立消息循环,WndProc()函数负责消息的处理。
13.构成函数的覆盖的条件为:
基类函数必须是虚函数(使用Virtual关键字进行声明)发生覆盖的两个函数要分别位于派生类和基类中函数名称与参数列表必须完全相同
编程题
1.(5分)假设已有图形IDB_BITMAP,在oncreate函数中,创建该图形的插入符。
答:
在view类的头文件:
private:
(Bitmapbitmap);
在oncreate函数中:
Bitmap.LoadBitmap(IDB_BITMAP1);
Createcaret(&bitmap);
Showcaret();
2.假设其他函数都已编辑,只需编辑ontimer就可以完成将IDS_STRINGVC的字符串以左输出的方式输出(m_nWidth每次增加5,输出的颜色为红,下面200处输出)
m_nWidth+=5;
CClientDCdc(this);
TEXTMETRICtm;
dc.GetTextMetrics(&tm);
CRectrect;
rect.left=0;
rect.rtop=200;
rect.bottom=rect.top+tm.tmheight;
dc.SetTextColor(RGB(255,0,0));
CStringstr;
str.LoadString(IDS_STRINGVC);
dc.DrawText(str,rect,DT_LEFT);
3.(15分)在onchar中实现“回车到下一行”,“退格”等功能。
(字体为300,“华文行楷”,定义cpoint为m_peorigin)
答:
CClientDCdc(this);
CFontfont;
font.CreatepointFont(300,”华文行楷”,NULL);
CFont*poldFont=dc.Selectobject(&font);
TEXTMETRICtm;
If(0x0d==nchar)
{m_strLine.Empty();
m_Ptorigon.y+=tm.tmHeight;}
elseif(0x08==nchar)
{COLORREFclr=dc.SetTextcolor(dc.GetBKColor());
dc.TextOut(m_ptorigin.x,m_ptorigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);dc.SetTextColor(clr);}
else{m_strLine+=nchar;}
dc.TextOut(m_ptorigin.x,m_ptOrigin.y,m_strLine);
dc.Selectobject(poldFont);
4.如何在CDrawView类中实现划线功能,在消息响应函数OnLButtonUp中添加程序?
(已经在CDrawView类添加了一个新的成员变量m_ptOrigin,此变量的类型设置为CPoint,并且访问权限为Private,并且已在消息响应函数OnLButtonDown中保存了鼠标按下点的信息)
voidCDrawView:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{m_ptOrigin=point;
CView:
:
OnLButtonDown(nFlags,point);}
voidCDrawView:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{CView:
:
OnLButtonUp(nFlags,point);}
答案:
1.HDChdc;
hdc=:
:
GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);