Visual C++ 实用教程 第4版 - 郑阿奇 - - 习题参考答案

B(int i) { b = i;}

virtual void virfun()

{ cout<<\ private: int b; };

class D: public B {

public: D(){}

D(int i, int j):B(i) {d=j;} private: int d;

void virfun() { cout<<\};

void fun(B *obj) { }

obj->virfun();

void main() {

D *pd = new D; fun(pd); }

33.定义一个抽象类CShape,包含纯虚函数Area()(用于计算面积)和SetData()(用于重设形状大小)。然后派生出三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积。最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置。编写一个完整的程序。 #include class CShape {

public:

virtual float Area()=0; virtual void SetData(float, float)=0; };

class CTriangle:public CShape {

private:

float l,h; public:

void SetData(float width=0, float height=0) { l=width; h=height; } float Area() };

class CRect:public CShape {

private: float w,h;

public:

void SetData(float width=0, float height=0) { w=width; h=height; }

float Area() { cout<< h*w<<'\\n'; { cout<< h*l/2<<'\\n'; return (h*l/2);

}

return (h*w); } };

class CCircle:public CShape {

private: float r;

public:

void SetData(float radius=0,float l=0) };

2.4运算符重载

34.运算符重载的含义是什么?是否所有的运算符都可以重载?

运算符重载也是实现静态多态性的一种方法,可以使操作的含义更加清晰。在C++中,

大多数系统预定义的运算符都能被重载,但是并不是所有的运算符都可以重载的,比如:

{ r=radius; } float Area()

{ cout<< 2*3.1416*r*r<<'\\n'; return (float)2*3.1416*r*r; }

? : :: .

就不能重载。

第3章 MFC基本应用程序的建立

1. Windows的应用程序特点有哪些?

参考书(p143~145)

2. MFC的AppWizard(exe)提供了哪几种类型的应用程序?

使用MFC的AppWizard可以创建下面三种类型的应用程序: (1)单文档界面的应用程序(SDI,single document interface); (2)多文档界面的应用程序(MDI,multiple documents interface); (3)基于对话框的应用程序(dialog based)。

3.MFC有哪些机制?这些机制有什么用?

4.用AppWizard创建一个多文档应用程序项目(MDI)Ex_MDIHello,比较MDI与SDI有哪些区别?

SDI应用程序由应用程序类(CWinApp)、框架窗口类(CFrameWnd)、文档类(CDocument)、视图类(CView)和文档模板类(CSinSleDocTemplate)共同作用。MDI应用程序与SDI应用程序的主要差别在于:MDI有CMDIFrameWnd和CMDIChildWnd两个框架窗口类,前一个派生

CMainFrame类,负责菜单等界面元素的主框架窗口管理;后一个派生CChildFrame类,负责相应的文档及其视图的子框架窗口维护。而SDI由框架窗口类CFrameWnd派生CMainFrame类。

5.消息的类别有哪些?用ClassWizard如何映射消息?

⑴窗口消息:窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等操作相关。窗口消息的形式为WM_***,其中*的内容与每个窗口消息的内容有关。窗口消息只能被窗口或窗口对象处理,在MFC应用程序中,CView和CFrame及它们的派生类,以及自定义窗口类型都能处理窗口消息。 ⑵命令消息:命令消息一般与处理用户的某个请求或执行用户的某个命令相关。在MFC应用中,凡是从基类CCmdTarget派生的类都能处理命令消息,不仅窗口类CView、CFrame,而且文档类、应用程序类都可处理命令消息。一般通过选择菜单项、单击工具栏按钮、按加速键可产生命令消息。

⑶控件消息:控件消息与控件窗口中某个事件的发生相关。如改变文本框控件窗口的内容时,有一个通知窗口内容发生变化的控件事件产生。当选择列表框控件的某个选项时,也有一个通知选项发生改变的控件事件发生。

6.如何通过ClassWizard添加一个类?

第4章 对话框及常用控件

1.什么是对话框?它分为哪两类?这两类对话框有哪些不同?

对话框是CDialog类的派生类,它的主要功能是输出信息和接收用户的输入。对话框是一个特殊类型的窗口,任何对窗口的操作都可以在对话框中进行。对话框与控件是密不可分的,在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互。

对话框可以分为两种类型:一是模式对话框;二是无模式对话框。 ⑴模式对话框:所谓的模式对话框是指对话框弹出时,用户必须向对话框进行相应的操作,在退出对话框之前,其所在的应用程序是不能往下执行的。

⑵无模式对话框:无模式对话框是指对话框弹出后,一直保留在屏幕上,用户可以在对话框所在的应用程序中进行其他的操作。

两种对话框在编辑器设计和使用ClassWizard进行编程时方法基本一致,但在创建和退出对话框窗口时的方式不同。

在创建时,模式对话框是由系统自动分配内存空间,因此在对话框退出时,对话框对象 自动删除。而无模式对话框则需要用户来指定内存,退出时还要自己删除对话框对象。 在退出时,两种对话框所用的终止函数不一样。模式对话框通过调用CDialog::EndDialog来终止,而无模式对话框则是通过调用CWnd::DestroyWindow来终止。 需要说明的是:

由于函数CDialog::OnOK()和CDialog::OnCancel()是调用EndDialog的,因此无模式对话框必须用DestroyWindow来重载OnOK()和OnCancel()两个函数。另外,需要正确删除表示对话框的C++对象。

2.什么是对话框模板、对话框资源和对话框类?

⑴对话框模板:MFC Develop Studio提供的对话框模板是用来创建用户对话框资源,用对话框模板创建的基本界面上,包括一个OK(确定)按钮和一个Cancel(取消)按钮等。可以移动、修改、删除这些控件,或者是增加新的控件到对话框模板,构成应用程序所需的对话框资源。

⑵对话框资源:对话框资源是一个用户输入或取得数据的图形界面。这个图形界面是使用 对话框编辑器在对话框模板上创建的,程序员可以在对话框模板上增加并编辑控件,生成对话框资源。当应用程序运行时,就可以得到一个对话框。

⑶对话框对象

MFC使用CDialog类来描述对话框,它是CWnd类的派生类。在CWnd类的基础上增加了数据交换的功能。当创建一个新的对话框资源后,使用ClassWizard可以创建一个对话框类的派生类。对话框对象实现了对话框和应用程序之间的通信。在应用程序中定义一个对话框对象后,在对话框关闭后,可以通过访问对话框对象的成员变量获得用户的输入数据。

3.对一个对话框编程一般经过几个步骤?

⑴创建对话框资源;⑵增加控件并设置控件属性;⑶设计对话框类;⑷模式或非模式方式显示对话框

4.什么是控件?根据控件的性质可以将控件分为几类?

控件是系统内部定义的能完成特定功能的一些组件,控件能够放置在一个对话框中,提供应用程序与用户交互的某种功能的类,根据控件的特性和功能,一般可以将其分为3类:Windows通用控件、ActiveX控件以及MFC新增控件,Windows通用控件一般都是从CWnd派生而来的。

5.向对话框添加一个常用控件的方法有哪些?这些方法是否适用于ActiveX控件?

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4