C++期末考试复习考点.docx
《C++期末考试复习考点.docx》由会员分享,可在线阅读,更多相关《C++期末考试复习考点.docx(8页珍藏版)》请在冰豆网上搜索。
C++期末考试复习考点
C++期末考试复习考点
1、试简单的叙述基于API与MFC编写程序的各自结构特点和区别(可以写出简单程序代码加以说明)。
答:
API是一套用来控制windows的各个部件的外观和行为的一套预先定义的Windows函数,用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。
MFC,微软基础类,实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。
MFC以面向对象的方式封装了API函数库,用类的形式构成了一个框架并把一些常用的功能,例如默认消息处理、窗口创建等实现了。
用户使用MFC时不用面对条目众多的API函数,使得编程更加简单方便。
2、一个windows应用程序的最基本构成应有哪些部分?
什么是MFC,使用MFC有什么好处?
MFC与Windows应用程序是什么关系?
(可写部分代码说明)
答:
一个Windows应用程序最基本构成由入口函数WinMain,窗口函数WndProc组成,并包含各种数据类型,数据结构和函数。
MFC是微软基本类库,实际上是微软提供的,用于C++环境下编写应用程序的一个框架和引擎。
它将传统的API进行了封装,并且创建了程序了一般框架,你只要随便添加几行代码,就能形成你自己的程序。
MFC是一个windows应用程序框架,它定义了应用程序的结构,并实现了标准的用户接口。
等等
3、类的构造函数与析构函数各自的特点以及联系和区别?
答:
构造函数与类名相同,没有返回值,参数可有可无,可以被重载,一个类至少有一个构造函数,没有显示意义,系统调用自动生成的构造函数,它的功能是在定义对象时被编译系统自动调用来创建对象,并初始化对象,且被定义为公有成员;析构函数也被定义为公有成员,函数名是类名前加“~”构成,没有返回值,不能有参数,不能被重载,一个类必须且只能有一个析构函数。
它的功能是当对象的生存期即将结束时,由编译系统自动调用来完成一些清理工作。
没有显示定义析构函数,则系统调用自动生成的析构函数。
4、类的静态数据成员如何被声明和初始化(写一个简单的例子来表达一下),以及类的静态成员函数和类的非static成员函数的使用方式的特点。
答:
类的静态数据成员如何被声明和初始化如下例所示:
staticintm_line;
intCshape:
:
m_line=8;(Cshape为包含m_line的类)
类的静态成员函数调用格式为<类名>:
:
<静态成员函数>,其在类外定义与非静态成员函数一样。
但是静态成员函数可以直接访问类的静态数据成员和静态成员函数,但不能直接调用类中的非静态成员,如果要使用,可以通过对象来调用。
而非静态成员函数可以直接访问类中的所有成员。
5、阐述public、protected、private这三种继承方式,其各自派生类以及派生对象对基类成员的访问情况。
答:
①公有继承:
基类的public、protected、private成员的访问在派生类中不变。
派生类中的成员函数可以直接访问基类的public和protected成员,但不能直接访问基类的private成员,通过派生类的对象只能访问从基类继承的public成员。
②私有继承:
基类的所有成员都以private身份出现在派生类中,但基类的private成员不可直接访问,派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员,通过派生类的对象不能直接访问基类的如何成员。
③保护继承:
基类的public和protected成员都可以以protected身份出现在派生类中,基类的private成员保持其访问控制属性不变,但基类的private成员不可直接被访问,派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类中的private成员,通过派生类的对象不能直接访问基类中的任何成员。
6、C++多态的运行期绑定(后期绑定)的实现需要具备哪些前提条件?
写一个简单的抽象基类。
答:
第一定义虚函数,第二通过对象指针或者对象引用来调用虚函数,当然这都是基于继承派生的,没有继承派生定义虚函数没有意义。
例子:
ClassAbstract
{
Public:
Virtualvoiddisplay()=0;
}
7、假设有一个类test,请为这个类设计一个拷贝构造函数(或复制构造函数)的原型,给出代码示例,并列举三种不同方式的构造函数调用情况。
答:
拷贝构造函数有以下三种调用方式:
①用一个已经定义过的类对象去初始化一个新定义的类对象时;②函数调用中,传递的参数为类对象时;③函数调用中,返回一个类对象时。
8、阐述C++中函数默认参数的使用规则,并给出简单代码示例。
答:
①函数在定义时可以预先声明默认形参值
②默认形参值必须按照从右到左的顺序声明
③默认形参值必须在函数原型中给出
9、试解释#include和#include”myfile.h”的区别。
答:
#include指令也称为文件包含指令,其作用是将原文件嵌入到当前文件中该点处,通常用#include指令来嵌入文件。
文件包含指令有两种格式:
#include<文件名>和#include“文件名”。
#include表示按照标准方式搜索,文件位于C++系统的include子目录下。
#include“myfile.h”表示首先在当前目录中搜索,若没有,再按照标准方式搜索。
10、试简述如何调试VC和C++程序。
11、举例说明static关键字的用法及特点。
12、试用代码说明如何进行抽象类定义。
答:
抽象基类不能被实例化,其可以用来指明某些必须被派生类覆盖的虚函数,这样就可以让一些类具有共同的接口,它们都是继承于某个抽象基类的。
classAbstract
{
Public:
Virtualvoiddisplay()=0;
}
13、什么是面向对象,C++如何实现面向对象的。
答:
定义——面向对象是专指程序设计中采用封装、继承、抽象等设计方法
实现——将数据及对数据的操作方法放在一起,作为一个相互依存不可分离的整体—对象,对同类型对象抽象出共性,形成类。
类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通行。
14、什么是虚函数?
如何使用虚函数?
答:
虚函数是动态绑定的基础,是非静态的成员函数。
在类的声明中,在函数原型之前写virtual。
virtual只用来说明类声明中的原型,不能用在函数实现时。
虚函数有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
它的本质不是重载而是覆盖。
调用方式:
通过基类指针或者引用,执行时会根据指针指向的对象的类,决定调用哪个函数。
15、什么是函数重载?
举例说明。
答:
所谓函数重载是指一个函数名可以对应着多个函数的实现。
每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数的类型不同。
这就是函数重载的概念,函数重载在类与对象中应用尤其重要。
16、什么是VC?
VC和MFC有什么关系?
答:
①VC是一个IDE集成开发环境,使用C++的一个开发平台,也可称为可视化的C++语言的开发工具。
②MFC是随着微软VC开发工具宣布的类库,用于在C++环境下编写应用程序的一个框架和引擎。
17、请说明在循环中使用break和continue语句的区别。
答:
Break使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。
不宜用在别处。
Continue语句结束本次循环,接着判断是否执行下一次循环。
18、试比较局部变量(自动变量)、静态变量、全局变量的区别。
19、描述函数重载的规则,并举例说明。
答:
函数重载规则——函数定义中必须使用不同数量的形参,或者使用不同类型的形参或同时满足这两个条件。
20、请简要说明模板函数和回调函数。
答:
所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表?
这个通用函数就称为模板函数?
函数模板有模板前缀template。
回调函数,顾名思义,就是使用者自己定义一个函数,使用者自己实现这个函数的程序内容,然后把这个函数作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。
函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。
简单来说,就是由别人的函数运行期间来回调你实现的函数。
21、操作系统将程序装入内存后,将形成一个进程空间,该空间分为哪四个区域?
其中静态局部量位于哪个区域?
22、简述windows窗口程序的基本工作机制和流程。
答:
1、调用CWinApp的构造函数
2、程序入口函数WinMain接受控制
3、WinMain调用应用程序类的函数InitInstance函数
4、WinMain进入消息循环,处理相应消息
5、WinMain退出,程序终止
23、面向对象的程序设计有哪些优点?
答:
以面向对象为核心的程序设计思想,将数据结构和操作数据的函数封装在一起。
程序的开发效率高,编写的程序代码具有较高的可重用性。
由于编写的程序代码少,并具有良好的封装性,因此开发的程序自然易于维护。
24、一个C++程序一般由哪几个部分组成?
答:
包含的系统头文件;包含的自定义头文件;主函数;自定义函数。
25、使用VisualC++编写C++程序时一般要经过哪几个步骤?
每个步骤的作用是什么?
相应的产生哪些文件?
答:
编辑(edit)cpp
编译(Compile)obj
链接(link)exe
执行(Run)
MFC画图
1、画点
COLORREFSetPixel(POINTpoint,COLORREFcrColor);
其中参数point指定所绘制的点,crColor指定画点所用的颜色。
倘若要在屏幕的(100,100)处画一个红色点,则代码为:
pDC->SetPixel(CPoint(100,100),RGB(255,0,0));
2、画折线
BOOLPolyline(LPPOINTlpPoints,intnCount);
其中lpPoints是指向折线顶点数组的指针,而cCount则指定折线顶点数组中的顶点数目。
POINTpolyline[4]={{240,240},{80,120},{240,120},{80,240}};
pDC->Polyline(polyline,4);
3、画矩形
BOOLRectangle(intx1,inty1,intx2,inty2);
BOOLRectangle(LPCRECTlpRect);
此函数成功调用后返回非0值,否则返回0。
其中参数(x1,y1)为指定矩形的左上角逻辑x与y坐标;(x2,y2)为指定矩形右下角的逻辑x与y坐标。
参数LpRect为一个矩形结构的指针,用它来表示矩形的四个角。
pDC->Rectangle(390,110,600,230);
4、画椭圆或圆(圆是特殊的椭圆)
BOOLEllipse(intx1,inty1,intx2,inty2);
BOOLEllipse(LPCRECTlpRect);
这两个函数画椭圆成功后返回非0值,否则返回0。
所画椭圆高度为y2-y1,宽度为x2-x1。
在该函数中,椭圆是由其外接矩形来确定的。
外接矩形的中心与椭圆中心重合,矩形的长和宽和椭圆的长短轴相等。
函数中的参数与画矩形的相仿,分别表示椭圆外接矩形的左上角和右下角坐标。
pDC->Ellipse(80,260,280,380);
5、画圆角矩形
BOOLRoundRect(intx1,inty1,intx2,inty2,intx3,inty3);
该函数用于绘制一个圆角矩形,并用当前的画刷来填充该圆角矩形的内部区域。
其中参数(x1,y1)为指定矩形的左上角位置x与y坐标;(x2,y2)为指定矩形右下角位置x与y坐标,(x3,y3)用于定义矩形四个角上的边角内切椭圆的宽度和高度,值越大,圆角矩形的角就越明显。
如果x3=x2-x1,并且y3=y2-y1,则所绘制的圆角矩形变为一个椭圆。
6、画多边形
POINTpolygon[3]={{380,330},{530,260},{500,360}};
pDC->Polygon(polygon,3);