}
longAn(intn)
{
if(n==0)
return1;
return3*An(n-1)+2*Bn(n-1);
}
longBn(intn)
{
if(n==0)
return0;
returnAn(n-1)+Bn(n-1);
}
2、下面是向AutoCAD数据库添加实体的函数,请解释各条语句。
AcDbObjectIdCSADDLE:
:
AddEntityToDbs(AcDbEntity*pEntity)
{
AcDbBlockTable*pBlockTable;//定义块表指针
acDocManager->lockDocument(curDoc());//锁定文档
acdbCurDwg()->getBlockTable(pBlockTable,AcDb:
:
kForRead);
//获得块表指针
AcDbBlockTableRecord*pBlockTableRecord;//定义块表记录指针
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,
AcDb:
:
kForWrite);//获得块表记录指针
AcDbObjectIdentityId;//定义对象的ID号
Acad:
:
ErrorStatuses=pBlockTableRecord->appendAcDbEntity(entityId,pEntity);
//向块表记录中添加对象
pBlockTable->close();//关闭块表
pBlockTableRecord->close();//关闭块表记录
acDocManager->unlockDocument(curDoc());//解锁文档
//pEntity->close();//关闭对象
returnentityId;//返回对象的ID号
}
3、写出创建一个新的连接对象并打开SQLServer数据源的连接的代码,数据库名称为Saddles,服务器(计算机)名称为PC7。
_ConnectionPtrm_pConnection;
HRESULThr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open(_bstr_t(L"driver={SQLServer};
Server=PC7;DATABASE=Saddles"),
_bstr_t(L""),_bstr_t(L""),adModeUnknown);
}
else
AfxMessageBox("失败");
}
4、解释下面生成换热器支座筋板的各条语句的含义。
AcDbObjectIdCSADDLE:
:
Saddles(AcDb3dSolid*p3dObj)
{
…………
AcGePoint2dArraypt2d;//定义二维坐标点数组
pt2d.setLogicalLength(4);//定义数组长度
//以下四句为各二维坐标点设置值
pt2d[0].set(10+m_vHD2-0.5*m_vB1,0);
pt2d[1].set(10+m_vHD2+m_vB2-0.5*m_vB1,0);
pt2d[2].set(10+m_vHD2+m_vB3-0.5*m_vB1,sqrt(3)*(m_vH+0.25*m_vDN));
pt2d[3].set(10+m_vHD2-0.5*m_vB1,sqrt(3)*(m_vH+0.25*m_vDN));
AcGeVector3dnormal(0.0,1.0,0.0);//定义法向矢量
AcDbPolyline*poly=newAcDbPolyline;
//定义多段线指针并把分配的多段线动态内存地址赋值给它
for(inti=0;i<4;i++)
{
poly->addVertexAt(i,pt2d[i],0,0,0);
}//设置多段线各顶点坐标及凸度值
poly->setClosed(Adesk:
:
kTrue);//设置多段线为闭合状态
poly->setNormal(normal);//设置多段线法向矢量
AcDbVoidPtrArraylines,regions;//定义无值型指针
lines.append((void*)poly);//获得指向封闭边界的无值型指针
AcDbRegion:
:
createFromCurves(lines,regions);
//从封闭边界中生成面域对象
AcDbRegion*pRegion=AcDbRegion:
:
cast((AcRxObject*)regions[0]);
//定义面域指针并获得指向面域的指针
AcDb3dSolid*p3dObjjinban=newAcDb3dSolid;
//定义筋板指针并把分配的三维实体动态内存地址赋值给它
if(Acad:
:
eOk==p3dObjjinban->extrude(pRegion,m_vHD3,0))
AddEntityToDbs(p3dObjjinban);
//用拉伸法生成筋板并把其添加到AutoCAD数据库
…………
}
**********************************************************************
1、在不同数据类型上作不同运算以完成相同功能而又使用同一函数名的情况称之为重载,该函数称之为重载函数。
2、引用形式上是目标变量或对象的别名,而实际上引用具有指针的威力。
3、在类定义外部定义成员函数,成员函数名前必须加该类名和作用域区分符:
:
,且在类定义内部要有该成员函数声明。
4、派生类通过调用基类的公共成员函数(接口)来访问基类的受保护的数据成员。
5、面向对象程序设计方法更符合人类的思维方式,更直接地描述客观世界,通过提高代码的可重用性、可扩充性和程序自动生成功能来提高编程效率,大大减少软件维护的开销。
6、面向对象程序设计是以对象为基础,以事件或消息来驱动对象执行相应处理的程序设计方法。
7、面向对象程序设计将数据及对数据的操作封装在一起,作为一个相互依存、不可分离的整体——对象;采用数据抽象和信息隐蔽技术,将这个整体抽象成一种新数据类型——类。
8、类给出了属于该类的全部对象的抽象定义,而对象则是符合该类特征的一个实体。
因此,对象又称作类的一个实例。
9、消息(Message)是描述事件发生的信息,是对象之间发出的行为请求。
事件(Event)一般由多个消息组成。
10、多态性即在父类中定义的属性或行为,被派生类继承之后,可以具有不同的数据类型或表现出不同的行为特性。
11、Java语言是1995年6月由SUN公司推出的一种纯粹的面向对象程序设计语言,其避免了C、C++中的不合理因素,真正实现了跨平台,可运行于各种操作系统和芯片。
12、VisualC++是以C++为语言、以MFC类库为基础的功能强大的可视化软件开发工具库,可以完成各种各样应用程序的开发,从底层软件到上层直接面向用户的软件以及网络应用程序等。
13、C++语言全面兼容C语言,保持了C语言的简洁、灵活、高效和接近汇编语言等特点;对C语言的类型系统进行了革新和扩充,因而C++比C更安全;C++的编译系统也比C更严格;C++既支持面向过程的程序设计,又全面支持面向对象的程序设计,是混合型大型程序设计语言。
14、指针(pointer)是用于存放其它数据地址的变量。
这些数据可以是基本数据类型,也可以是数组、指针、类等用户自定义数据类型。
15、表达式即程序中用于计算的算式,是指通过各种运算符(包括括号)将常量、变量及函数等有关操作数据连接起来的符合C++语法规定的算式。
16、条件运算符是C++中唯一的三元运算符,它可以实现简单的选择功能。
形式如:
表达式1?
表达式2:
表达式3;先求解表达式1,若表达式1的值为true,则以表达式2的值为最终结果,若表达式1的值为false,则以表达式3的值为最终结果。
17、cin和cout是系统预定义的流类对象。
cin用来处理由标准设备产生的输入,如键盘输入;cout用来处理向标准设备的输出,如向屏幕输出。
18、插入运算符“<<”是C++系统预定义的运算符,用于输出,例:
cout<<表达式1<<表达式2<<…<<表达式n;
提取运算符“>>”是C++系统预定义的运算符,用于输入,例:
cin>>表达式1>>表达式2>>…>>表达式n;
19、C++程序控制结构之选择结构是通过if语句或switch语句实现的,即根据条件判断来执行不同的程序段或程序模块。
20、函数递归调用是指一个函数可以直接或间接调用该函数自身。
21、C++继承了C语言函数的特性,同时在函数的使用性能上也有新的改进,包括允许使用内联函数、允许使用带缺省参数的函数、支持函数重载。
22、作用域是指包括变量在内的标识符的有效性范围,即标识符的作用空间。
23、标识符在一个函数的语句块内定义时,则它具有块作用域。
语句块指程序中一对花括号内的语句部分。
块作用域是从块内的定义处开始,直到该块结束(即右花括号)为止。
24、函数中使用的语句标号具有函数作用域,仅在本函数中有效。
25、C++程序中,在函数之外声明的标识符具有文件作用域,在整个程序文件中均有效,但在其它文件中无效,其作用域开始于声明处,结束于该文件的结束处。
26、在C++程序文件中,当一个变量定义在所有函数之外(通常在所有函数定义之前),则该变量称为全局变量,其存放在内存的全局数据区,具有全局作用域。
全局变量方便了数据的共享,但破坏了数据的隐蔽性,应尽量少定义全局变量。
27、局部变量指在函数内或语句块内定义的变量,它仅具有函数作用域或语句块作用域。
恰当使用局部变量可实现函数之间的数据隐蔽。
28、C++程序中,既可以将程序源代码包含在一个程序文件中,也可以将不同的功能部分放在不同的文件中。
一般将声明部分或说明部分(包括类的声明)形成为.h文件,将函数的定义、类的实现及类的使用等形成为.cpp文件。
29、面向对象程序设计的核心任务是类的确定和对象的创建,而不是将各个具体的对象逐一进行描述。
30、从语法分析,类也是一种数据类型,即用户自定义的数据类型,而一个具体的对象可以视为属于这一数据类型的一个变量。
31、类是对具有相同属性和行为的一组对象的抽象与统一描述。
类的定义包括属性和行为两个部分,属性以数据(数据成员)表示,行为通过函数(成员函数)实现。
32、类的任何成员都必须指定访问属性,一般将数据成员定义为私有成员或保护成员,将成员函数定义为公有成员。
33、在类中实现的成员函数自动成为内联函数,其可以减少函数调用开销,提高程序的执行效率。
一般将调用频繁且代码少的成员函数定义为内联成员函数。
34、对象成员的访问形式包括
圆点访问:
“对象名.公有成员;”
指针访问:
“对象指针变量名->公有成员;”。
35、指针所指向的数据类型应与new运算符后的数据类型相同,若申请成功则返回分配单元的首地址给指针变量,否则返回空指针值给指针变量。
36、不同对象的区别主要表现在两个方面:
对象名:
即对象的标识符(外在区别);
对象属性:
即数据成员的值(内在区别)。
37、C++中对象的创建与初始化、对象生命期结束时的清理工作,分别由构造函数和析构函数完成。
38、复制构造函数也是一种特殊的成员函数,功能是用一个已知的对象初始化一个被创建的同类新对象,从而实现同类对象之间数据成员的值的传递,其参数是本类对象的引用。
39、在C++中,若在类作用域外部直接访问类的私有数据成员,则可通过定义友元来实现这一功能。
40、派生类的生成过程经历了三个步骤:
吸收基类成员
改造基类成员
添加派生类新成员。
41、改造基类成员可通过在派生类中定义同名成员(包括成员函数和数据成员)来屏蔽在派生类中不起作用的部分基类成员。
42、仅仅继承基类的成员是不够的,需要在派生类中添加新成员,以保证派生类自身特殊属性和行为的实现。
43、在公有继承、私有继承和保护继承时派生类的成员都可以直接访问基类的公有成员和保护成员,但无法访问基类的私有成员。
44、当派生类同时具有两个或两个以上的基类时称为多继承。
45、多态性是指基类及其派生类中同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数的特性。
46、虚函数是一个在基类中通过virtual声明,并在一个或多个派生类中被重新定义的成员函数。
47、VisualC++6.0的项目工作区位于主窗口的左边,主要有ClassView、FileView和ResourceView三个标签。
48、Windows对系统所定义的不同消息采用不同的前缀,例如WM前缀表示窗口消息。
49、Windows系统的句柄(Handle)是一个整数值,是一个4字节长的数值,用于标识Windows应用程序中的不同对象和同类对象中的不同实例,如一个菜单、窗口、图标、控件、内存块、输出设备或文件等。
50、动态链接是指有关文件可以在程序运行时才被装入和连接起来,动态链接时多个应用程序可以共享同一个动态链接文件,从而使系统节约大量的内存和磁盘空间。
51、动态链接库文件(后缀.dll)可以单独编译和调试,增强了程序调试的灵活性。
动态链接使大型软件的开发变得非常方便。
52、ADO模型包括的对象有连接、命令、记录、字段、参数、错误。
**********************************************************************
1、字符串常量,字符数组名,字符指针均属于同一种数据类型,即(C)。
A.字符类型B.指针类型C.字符指针类型D.地址类型
2、将类定义和其成员函数定义分开,是目前开发程序的通常做法。
可把类定义(头文件)看成是类的(A)。
A.外部接口B.内部接口C.源文件D.声明文件
3、构造函数专门用于自动创建类对象及为其初始化,所以它(B)。
A.可随意被调用B.不能随意被调用(可自动隐式调用)
C.有条件地被调用D.可被调用
4、析构函数没有返回类型,没有参数,不能随意被调用,还没有(A)。
A.重载B.继承C.组合D.封装
5、类与类之间,你做你的,我做我的,以接口即(C)作沟通。
即使是基类与子类也不例外。
这正是类能够发挥其生命力的原因所在。
A.私有成员函数B.保护成员函数
C.公共成员函数D.非成员函数
6、一个类中将所有的成员函数都尽可能地设置为虚函数总是(C)。
A.无益的B.有利有弊的C.有益的D.无所谓的
7、在C++中,声明类MyClass包含protected类型的变量x,则x可以被(A,C)访问。
A.MyClass类的成员函数B.MyClass类的基类
C.MyClass类的派生类D.MyClass类所在项目的所有类
8、在IDE中,可以通过(A,C,D)打开类向导MFCClassWizard。
A.菜单栏视图选项B.工具栏按钮
C.鼠标右键的弹出菜单D.Ctrl键+W键
9、在基于对话框的应用程序中,最多可以为一个控件添加
(2)个变量。
A.1B.2C.3D.4
10、模态对话框和非模态对话框的不同体现在(B,C)。
A.资源模板不同B.创建、显示方式不同
C.交互性能不同D.派生自不同的基类
11、如果类外的非本类成员函数需要访问类的私有数据成员或保护成员,则需要将该函数声明为类的(B)。
A.重载函数B.友元函数C.虚函数D.内联函数
12、如果被传递的数据是存放在一个连续的内存空间,就可以采用(A)作为函数参数,传递大量数据,降低系统开销
A.指针B.变量C.类对象D.数组名
13、ADO是一种面向对象的与语言无关的数据库连接应用编程接口,其包含三个基本接口是(A,B,C)。
A._ConnectionPtrB._CommandPtrC._RecordsetPtrD.this
14、字段(Field)用于表示记录集中的列信息,每个字段(列)包含(A,B,C)的属性。
A.名称B.数据类型C.值D.真实数据
15、使用ADO前必须在工程的stdafx.h文件中用直接引入符号#import引入ADO库文件并去掉(B)支持,已使编译器能正确编译。
A.ODBC库文件B.DAO库文件C.OLE文件D.COM文件
16、ADO库是一组COM动态库,在调用ADO前(C)OLE/COM库环境。
A.不能初始化B.可以初始化C.必须初始化D.怎么都行
17、下列是VC++6.0工程项目资源的是(A,B)。
A.位图(Bitmap)B.对话框(Dialog)
C.按钮(Button)D.编辑框(Edit)
18、创建一个新的Connection对象非常简单,只需声明一个(A)指针,并调用它的CreateInstance()成员函数。
A.连接B.命令C.记录集D.字段
19、用VC++对AutoCAD进行二次开发需要(B)接口。
A.AutomationB.ObjectARXC.LispD.Autolisp
20、ADO模型包括的对象有(A、B、C、D)以及参数和错误。
A.连接B.命令C.记录D.字段
**********************************************************************
1、数组名作参数即数组作参数,它实际上仅仅只是一个数组的起始地址而已。
(√)
2、变量、数组、指针和类对象都可以是全局的、静态的或局部的。
(√)
3、类成员声明为私有(private)或保护(protected)时,在类作用域外部能够直接访问之。
(×)
4、类定义分配内存空间,所以类定义中的数据成员可以被初始化。
(√)
5、在类作用域外部,必须通过类对象或类指针调用或访问公共的类成员。
(√)
6、一个类对象所占据的内存空间是由它的数据成员所占据的内存空间的总和所决定的。
类的成员函数不占据类对象的内存空间。
(√)
7、和普通变量定义不同,C++创建并初始化类对象是由该类的构造函数自动完成的。
而撤消类对象是由该类的析构函数自动完成的。
(√)
8、若构造函数一个都未提供,则C++提供一个默认构造函数,它是无参构造函数,仅负责创建对象而不作初始化。
(√)
9、自动调用析构函数的顺序与自动调用构造函数的顺序正好相反。
最先被构造的类对象最后被析构,而最后被构造的类对象最先被析构。
(√)
10、继承的方式是在子类定义中的子类名后跟:
public父类名。
子类将继承父类的所有成员(包括成员函数和数据成员),还要设置自己的特有成员。
(√)
11、基类中public类型的数据在派生类中可能变成private类型。
(×)
12、一个类以另一个类对象作为其数据成员,就称为组合。
(√)
13、虚函数是可以“重载”的成员函数,具有多态性。
若语言不支持多态性,则不能称其为面向对象的。
(√)
14、在数据库连接技术中,DAO比ODBC优越,ADO比DAO更优越。
(√)
15、类中的数据成员可以是C++语法规定的任意数据类型,但不能用存储类型auto、register或extern进行修饰。
(√)
16、类的数据成员可以是其它类的对象,但不能以类自身的对象作为本类的成员,而类自身的指针和引用可以作为类的成员。
(√)
17、没有明确指定成员的访问权限时,C++结构体的成员是公有的,而类的成员是私有的。
(√)
18、类中定义的成员函数自动成为内联函数。
(√)
20、类与对象的关系,如同C++基本数据类型和该类型的变量之间的关系。
(√)
21、仅仅定义了类,系统并不会分配存储空间;只有定义了类对象后,编译系统才会在内存中预留空间。
(√)
22、声明了类并定义了类对象以后,就可以访问对象的公有成员(包括数据成员和成员函数)。
(√)
23、构造函数的函数名与类名相同,其功能是在定义对象时由编译系统自动调用来创建对象并初始化对象。
(√)
24、构造函数只能一次性地影响对象的数据成员初值。
(√)
25、每个类都必须至少有一个构造函数。
如果程序没有显式定义构造函数,编译系统将自动生成一个默认的构造函数。
(√)
26、复制构造函数有且仅有一个参数,即是同类对象的引用。
(√)
27、通过一个对象初始化另一个对象时,自定义复制构造函数不仅复制了数据成员,也复制了资源,这种复制方式称为深复制;(√)
28、静态成员提供了同一个类不同对象数据成员的共享机制。
(√)
29、与静态数据成员一样,静态成员函数不是某一个类对象的成员,而是属于整个类。
(√)
30、采用静态成员函数,可以在创建对象之前处理静态数据成员,这是普通成员函数不能实现的。
(√)
31、静态成员函数只能直接访问该类中的静态数据成员,而不会影响该类的其它数据成员。
(√)
32、静态成员函数不能直接访问类中的非静态成员。
如果需要访问该对象的非静态数据成员,可以通过对象名访问。
(√)
33、若B是A的友元,若没有特别声明,则A不是B的友元。
(√)
34、若B是A的友元,C是B的友元,若没有特别声明,则C不是A的友元。
(√)
35、友元函数可以是一个普通函数,也可以是另外一个类的成员函数。
(√)
36、若一个类被声明为另一个类的友元,则该类的所有成员函数都是另一个类的友元。
(√)
37、类作用域是指在类的声明中用一对花括号括起来的部分。
(√)
38、当一个函数的返回值是指针类型时,这个函数称为指针型函数。
(√