111111111111111111111111111111111111111111111111111111111111
1 填空题
面向对象程序设计的特点
基类成员访问属性
窗口创建
mfc 自动创建类
句柄分类 HICON HCURSOR HWND HINSTANCE
文档 视图结构特点
生存期
作用域
类和对象
文件类型
API
Windows系统 事件
句柄类型 HDC HFONT HWND HMENU 设备环境
应用程序类型
视图形式
222222222222222222222222222222222222222222222222222222222222222222
二
静态数据成员与一般数据成员
派生类 对象指针
抽象类
普通函数 成员函数 友元函数
比较值调用 引用调用
windows应用程序中的消息传递时如何进行的
windows应用程序的最基本构成包括哪些部分
GDI 在Windows绘图中有什么作用
什么时候需要进行图形刷新,怎么实现
映像模式
当用应用程序向导成MFC应用程序的时候,在源代码中找不到WinMain函数,这是为什么
使用MFC AppWizard 生成一个简单的SDI应用程序,分析App Wizard创建了那些类和文件
MFC 应用程序从theApp开始启动:
什么事消息映射 他的作用是什么
MFC中用什么类来管理编辑框控件
什么函数被用于接收从编辑框控件中输入的文本
如何让菜单显示在应用程序的窗口中
滚动条空间是如何进行消息传递的
如何定义滚动条的初始化状态
具有多个滚动条的应用程序中,如何识别不同的滚动太
文档和视图是如何相互作用的
文档和视图结构的特点是什么
添加菜单消息响应的实现步骤
创建以个工具栏一般需要那几个步骤
如何实现工具栏中的按钮与菜单中的某菜单项执行同一段代码
如何改变工具栏的停靠风格
33333333333333333333333333333333333333333333333333333333333333333333333333333333
复数类实现复数的加减功能
计算对象面积
1,面向对象程序设计的特点:多态,继承,封装,抽象
3,public:能否能能否否
protected:能否能否否否
private:能否能否否否
4,创建窗口及执行其他必要的初始化工作;并进入消息循环,根据从消息队列中接受的消息,调用相应的处理过程;当消息循环检测到WM_DESTROY 消息时,结束程序执行,消息处理函数是用于处理特定消息的的一些代码,一般包括一个switch 语句结构
5,利用MFC APIWizard 建立的一个单文档应用程序框架,将自动生成 stdafx ceshi MainFrm ceshiDoc
视图类C..... View 应用类 :C....App
文档类: C....Doc 主框架窗口类:CMainFrame 四个类
6,当Windows 捕获一条时间后,它会编写一条 将相应的消息放入一个名为MSG的结构体,然后将包含此数据结构的消息发送给需要消息的程序。windows消息是 头文件用宏定义的 。
操作系统通过消息机制将感知到事件传递给应用程序的,操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序.MSG结构定义如下:
typedef struct tagMSG{
HWND hwnd ; 窗口句柄(索引内存当中的资源)
UINT(无符号整型) message;
WPARAM(整型) wParam ; //关于消息的附加参数,例如:按下一个键,具体是哪个按键
LPARAM(整型) LParam ; //关于消息的附加参数
DWORD(32位整数) time ;//消息被传递时候的时间
POINT(坐标结构体) pt; //消息被传递时候,光标在屏幕上的位置
} MSG;
句柄 (HANDLE),资源的标识. 按资源的类型 ,将句柄细分成:图标句柄(HICON),光标句柄( HCURSOR),窗口句柄(HWND),应用程序实例句柄( HINSTANCE)
宏定义: typedef int WIDTH
WIDTH x;
7,文档/视图结构的最大特点就是把 数据操作 和 数据表示 分离开来 ,
二:
1,类中静态数据成员和一般数据成员有什么区别
常量没有存储在内存中,一般属于对象,不可由所有类对象共享。
静态成员是存储在全局区的,属于类而不属于对象,可以由所有类对象共享。
例如常量必须在类内初始化,而静态成员必须在类外初始化,类里面只能叫定义,静态成员函数不能是内联函数。
静态数据成员( static)是可以改变它的值的,但是程序运行中,静态变量仅仅具有同一份内存区域,所有对此静态变量的操作将共同影响这个变量的结果。它的生存期直至这个程序结束。
常数据成员( const),没有与生存期似乎没有关系,它必须在用到它的地方 "展开",它最大的可是范围是file scope,所以,它类似于inline函数,如果在多个文件中用到常数据成员,它必须被放在头文件中声明,因为编译器在 "展开"常数据成员的时候一定要知道它的值。
2,在使用引入派生类之后的对象指针要注意哪几点?
任何被说明为指向基类对象的指针都可以指向它的公有派生类。在使用引入派生类之后的对象指针时要注意下面几个问题:
⑴ 可以用一个声明让指向基类对象的指针指向它的公有派生对象。若试图指向它的私有派生对象是被禁止的。
⑵ 不能将一个声明为指向派生类对象的指针指向其基类的一个对象。
⑶ 声明为指向基类对象的指针,当其指向派生类对象时,只能利用它来直接访问派生类对中从基类继承来的成员,不能直接访问公有派生类中特定的成员。若想访问其公有派生类的特定成员,可以将基类指针显示类型转换为派生类指针来实现。
3,什么样的类被称为抽象类,抽象类的主要作用是什么?
抽象类是含有纯虚函数的类并没有实现纯虚函数函数体的类;
作用:抽象类顾名思义是一个抽象的概念,具体没有讲他怎么做;
他是在子类中实现的,这是一个具体化的过程,如果子类中没有全部实现纯虚构函数的函数体部分那其子类依旧是一个抽象类。
抽象类的派生类不一定要给出纯虚构函数的实现,给出所有纯虚函数的实现那该派生类就不再是抽象类,而没有给出其纯虚构函数的实现,那该纯虚函数依旧是抽象类。
4,普通函数和成员函数的声明为友元函数的形式分别是什么?
这个太多了,是说不清,不带这么问的,只能说不会了
1、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率
具体来说:为了使其他类的成员函数直接访问该类的私有变量
即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数
优点:能够提高效率,表达简单、清晰
缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。
2、什么时候使用友元函数:
1)运算符重载的某些场合需要使用友元。
2)两个类要共享数据的时候
3、怎么使用友元函数:
友元函数的参数:
因为友元函数没有this指针,则参数要有三种情况:
1、 要访问非static成员时,需要对象做参数;--常用(友元函数常含有参数)
2、 要访问static成员或全局变量时,则不需要对象做参数
3、 如果做参数的对象是全局对象,则不需要对象做参数
友元函数的位置:
因为友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。
友元函数的调用:
可以直接调用友元函数,不需要通过对象或指针
友元函数的分类:
根据这个函数的来源不同,可以分为三种方法:
1、普通函数友元函数:
a)目的:使普通函数能够访问类的友元
b)语法:声明位置:公有私有均可,常写为公有
声明: friend + 普通函数声明
实现位置:可以在类外或类中
实现代码:与普通函数相同(不加不用friend和类::)
调用:类似普通函数,直接调用
1 比较值调用和引用调用
值调用是指发生函数调用时,给参数分配内存空间,并直接将参数的值传递给形参。这一过程是参数的单项传递过程,一旦形参获得了值便于形参脱离关系,此后无论形参发生怎样的变化,都不会影响到实参。
引用调用不为形参分配内存,在执行主调函数中的调用语句时,系统自动用实参初试化形参。形参是实参的一个别名,对形参的任何操作也就直接作用于实参
传地址是是吧实参的地址传给形参,从而形参和实参同占一个内存空间,所以形参变实参也变;船只是实参把值赋值给了形参,两个参数有不同的地址,从而实参不随形参变化而变化。
三
constructing Base Base1 2
四:
1,iMessage
2,BeginPaint HDC.getHDC
3,Setmapmode
4,Ellipse
5,EndPaint
2
1,24 12 3 16 28 3 32 1 31 2 321
五:
1,编写一个程序声明一个复数类,通过重载 "-"和后置"--" ,实现两个复数相减和复数自减的功能
#include <iostream>
using namespace std;
class Complex
{
public:
Complex( double r =0,double i=0):real (r), imag(i )
{
};
friend Complex operator +(Complex & c1,Complex &c2);
friend Complex operator +(Complex & c,double i);
friend Complex operator +(double i,Complex &c);
friend ostream& operator << (ostream&, Complex&); //声明重载运算符“<<”
friend istream& operator >> (istream&, Complex&); //声明重载运算符“>>”
private:
double real;
double imag;
};
Complex operator +(Complex & c1,Complex &c2)
{
return Complex(c1 .real+ c2.real ,c1. imag+c2 .imag);
}
Complex operator +(Complex & c,double i)
{
return Complex(i +c. real,c .imag);
}
Complex operator +(double i,Complex &c)
{
return Complex(i +c. real,c .imag);
}
ostream& operator << (ostream& output,Complex & c) //定义重载运算符“<<”
{
output<< "("<<c .real<< "+"<<c .imag<< "i)";
return output;
}
istream& operator >> (istream& input,Complex & c) //定义重载运算符“>>”
{
cout<< "input real part and imaginary part of complexnumber:" ;
input>> c.real >>c. imag;
return input;
}
int main ( )
{
Complex c1(3,4),c2 (3,2),c3, c4,c5 ;
c3= c1+c2 ;
c4=5+ c2;
c5= c1+5;
cout<< "c3="<<c3 <<endl;
cout<< "c4="<<c4 <<endl;
cout<< "c5="<<c5 <<endl;
return 0;
}
2,声明一个Shape抽象类,在此基础上派生出Rectangle 和Circle类,二者都有GetArea()函数计算对象的面积。
#include "iostream"
using namespace std ;
#define PI 3.1415926
class Shape
{
public:
Shape()
{
}
double GetArea()
{
return 0.1;
}
};
class Rectangle:public Shape
{
public:
Rectangle( double w ,double h)
{
width= w;
height= h;
}
double GetArea()
{
return width*height ;
}
private:
double width,height ;
};
class Circle:public Shape
{
private:
double r;
public:
Circle( double rr )
{
r= rr;
}
double GetArea()
{
return PI*r *r;
}
};
int main()
{
Rectangle * rec=new Rectangle(4,5);
Circle * cir=new Circle(4);
cout<< "RecArea:"<<rec ->GetArea()<< endl;
cout<< "CirArea:"<<cir ->GetArea()<< endl;
return 1;
}