苹果6spuls二手多少钱:C++面试题荟萃4

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 22:54:36
1、  标准建模语言UML的重要内容可以由哪五类图(共9种图形)来定义,并简要说明这些图所描述的对象。
标准建模语言UML的重要内容可以由下列五类图(共9种图形)来定义:
  ·第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者。
  ·第二类是静态图(Static diagram),包括类图、对象图和包图。其中类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生命周期都是有效的。对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。包由包或类组成,表示包与包之间的关系。包图用于描述系统的分层结构。
  ·第三类是行为图(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常,状态图是对类图的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。
  ·第四类是交互图(Interactive diagram),描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作关系。除显示信息交换外,合作图还显示对象以及它们之间的关系。如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。这两种图合称为交互图。
  ·第五类是实现图( Implementation diagram )。其中构件图描述代码部件的物理结构及各部件之间的依赖关系。一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息。部件图有助于分析和理解部件之间的相互影响程度。
2、  什么是虚拟函式、虚拟继承?
3、  你在使用面向对象程序设计语言(例如C++, smalltalk等)和可重用的对象类库上有何经验?实际效果如何?有什么优缺点?
4、  引用和指针之间有什么区别?
引用是一个别名,而指针是一个保存地址的变量。引用不能为空也不能赋值。
5、  什么是函数重载?
函数重载是指用同一个函数名写多个函数的能力,这些函数根据参数的数目、类型加以区别。
6、  C++与其它传统编程语言相比有何特点?
7、  简要说明如何绘制UML活动图。
UML 活动图记录了单个操作或方法的逻辑,单个用户案例,或者单个业务流程的逻辑。要创建一个 UML 活动图,您需要反复执行下列步骤。
  第一步,定义活动图的范围首先应该定义您要对什么建模。单个用户案例力?一个用户案例的一部分?一个包含多个用户案例的商务流程?一个类的单个方法?一旦您定义了您所作图的范围,您应该在其顶部,用一个标注添加标签,指明该图的标题和唯一的标示符。您有可能也想要包括该图的时间甚至作者名。
  第二步,添加起始和结束点每个活动图有一个起始点和结束点,因此您也要马上添加它们。在 《UML 精粹》(UML Distilled) (参见参考资料),Fowler 和 Scott 认为结束点是可选的。有时候一个活动只是一个简单的结束,如果是这种情况,指明其唯一的转变是到一个结束点也是无害的。这样,当其他人阅读您的图时,他或她知道您已经考虑了如何退出这些活动。
  第三步,添加活动如果您正对一个用户案例建模,对每个角色(actor)所发出的主要步骤引入一个活动(该活动可能包括起始步骤,加上对起始步骤系统响应的任何步骤)。如果您正对一个高层的商务流程建模,对每个主要流程引入一个活动,通常为一个用户案例或用户案例包。最后,如果您正对一个方法建模,那么对此引入一个活动是很常见的。 
  第四步,添加活动间的转变我的风格总是应该退出一个活动,即使它是转变到一个结束点。一旦一个活动有多个转变时,您必需对每个转变加以相应标示。
  第五步,添加决策点有时候,您所建模的逻辑需要做出一个决策。有可能是需要检查某些事务或比较某些事务。要注意的是,使用决策点是可选的。例如,在图 1 中,我可以只是简单地将“接受”和“拒绝”两个转变直接接到“在大学报名(Enroll in University)”活动。
  第六步,找出可并行活动之处当两个活动间没有直接的联系,而且它们都必需在第三个活动开始前结束,那它们是可以并行运行的。在图 1 中,您看到是有可能“参加简要介绍(attend overview)”和“报名研讨班(enroll in seminars)”可以按任意次序进行,但是它们都得在您结束整个流程前完成。
8、  为什么有些类成员函数在类声明中定义而有一些则不是呢?
在声明中定义成员函数的实现是按内嵌方式进行的。一般来讲,只有当函数特别简单才这么做。注意,即使函数是在类声明之外声明的,你也可以用关键字inline使成员函数变成内嵌的。
9、  面向对象分析和设计的阶段有哪些?
概念化、分析、设计、实现、测试、发行(谨供参考)
10、    为什么要费力地生成抽象数据类型――为什么不把它设为非抽象的数据类型和避免创建这种类型的对象呢?
C++中很多约定的目的是为了便于使编译器找到错误,以避免你向用户提供的代码中产生运行时错误。把一个类抽象化――即给它提供纯虚函数――会使编译器把从这种抽象类型创建的任何对象标记为错误。
11、什么是多态性?多态性是如何实现的?
函数多态性是指用多个含义重载一个函数的能力,即允许创建多个名称相同的函数。
可通过改变同名函数变元的类型或个数来实现。
12、查错:下面这段代码有什么错误?
class Shape()
{
public:
Shape();
virtual ~Shape();
virtual Shape(const Shape&);
}
不能声明一个副本构造函数为虚拟。
13、查错:下面的代码有什么错?
int main()
{
       int SomeVariable = 5;
       count <<”SomeVariable:”<
       int * pVar = &SomeVariable;
       pVar = 9;
       count <<”SomeVariable:”<<*pVar<<”\n”;
       return 0;
}
程序编写者的意图是将9赋值给pVar所指的变量,不幸的是9却赋成了pVar的值,因为遗漏了间接访问运算符(*),如果用pVar来赋值的话导致灾难性错误。
14、查错:下面的程序有什么错误?并修改。
# include 
int * FuncOne();
int main()
{
int * pint = FuncOne();
  cout <<”the value of pInt back in main is:”<< * pint << endl
  return 0;
}
int * FuncOne()
{
  int * pint = new int(5);
  count <<”the value of pInt in FuncOne is:”<<* pint<
  return pint;
}
内存泄漏。
修改:
# include 
int  FuncOne();
int main()
{
int theint = FuncOne();
  cout <<”the value of pInt back in main is:”<
  return 0;
}
int  FuncOne()
{
  int * pint = new int(5);
  cout <<”the value of pInt in FuncOne is:”<<* pint<
int temp = *pint;
  delete pint;
  return temp;
}