9.6 复制构造函数和赋值函数
9.6复制构造函数和赋值函数面试例题1:Whichofthefollowingistrueabout"Copystructor"?(下面关于复制构造函数的说法中哪一个是正确的?)[中国杀毒软件公司J2005年,2009年面试题]
A.Theycopystructorintoeachother.(给每一个对象复制一个构造函数。)
B.Adefaultisprovided,butsimplydoesamember-wisecopy.(有一个默认的副本构造函数,但简单地说这只是位复制。)
C.They'tcopyarraysintoeachother.(不能复制数组。)
D.Alloftheabove.(以上结果都正确。)
解析:复制构造函数面试例题。
答案:B
面试例题2:WhichofthefollowingcssDOESNOTneedacopystructor?(下面所列举的类哪个不需要复制构造函数?)[中国台湾著名杀毒软件公司2004,2009年面试题]
A.Amatrixwhichtheactualmatrixisallocateddynamicallywithinthestructorandisdeletedwithinitsdestructor.(一个矩阵类中,实际的矩阵利用构造函数动态分配,利用析构函数删除。)
B.ApayrollwhicheachobjectisprovidedwithauniqueID.(一个花名册类中每一个对象应唯一的ID。)
C.Awordcsstainingastringobjedvectorobjectoflineandnlocationpairs.(一个word类包含一个字符串对象和一个存在行、列位置对的Vector容器。)
D.Alibrarycsstainingalistofbookobject.(一个图书馆类由一系列书籍对象构成。)
解析:按照题意,寻找一个不需要复制构造函数的类。
A选项要定义复制构造函数。
在B选项中,若不自定义复制构造函数,势必造成两个对象的ID不唯一。至于说自定义了复制构造函数之后,如何保证新对象的ID唯一,那是面试例题所涉及的内容。方法多种多样,比如可以使用当前的系统tick数作为新ID。当然在语义上有损失,不是完全意义上的复制,但在这儿只能在保持语义和实现目的之间来一个折中。
选C的原因是其使用了默认的复制构造、string子对象和Vector子对象,它们的类都是成熟的类,都有合适的赋值操作,复制构造函数避免了“浅复制”问题。
D选项显然要定义复制构造函数。
答案:C
【This chapter is finished reading】
A.Theycopystructorintoeachother.(给每一个对象复制一个构造函数。)
B.Adefaultisprovided,butsimplydoesamember-wisecopy.(有一个默认的副本构造函数,但简单地说这只是位复制。)
C.They'tcopyarraysintoeachother.(不能复制数组。)
D.Alloftheabove.(以上结果都正确。)
解析:复制构造函数面试例题。
答案:B
面试例题2:WhichofthefollowingcssDOESNOTneedacopystructor?(下面所列举的类哪个不需要复制构造函数?)[中国台湾著名杀毒软件公司2004,2009年面试题]
A.Amatrixwhichtheactualmatrixisallocateddynamicallywithinthestructorandisdeletedwithinitsdestructor.(一个矩阵类中,实际的矩阵利用构造函数动态分配,利用析构函数删除。)
B.ApayrollwhicheachobjectisprovidedwithauniqueID.(一个花名册类中每一个对象应唯一的ID。)
C.Awordcsstainingastringobjedvectorobjectoflineandnlocationpairs.(一个word类包含一个字符串对象和一个存在行、列位置对的Vector容器。)
D.Alibrarycsstainingalistofbookobject.(一个图书馆类由一系列书籍对象构成。)
解析:按照题意,寻找一个不需要复制构造函数的类。
A选项要定义复制构造函数。
在B选项中,若不自定义复制构造函数,势必造成两个对象的ID不唯一。至于说自定义了复制构造函数之后,如何保证新对象的ID唯一,那是面试例题所涉及的内容。方法多种多样,比如可以使用当前的系统tick数作为新ID。当然在语义上有损失,不是完全意义上的复制,但在这儿只能在保持语义和实现目的之间来一个折中。
选C的原因是其使用了默认的复制构造、string子对象和Vector子对象,它们的类都是成熟的类,都有合适的赋值操作,复制构造函数避免了“浅复制”问题。
D选项显然要定义复制构造函数。
答案:C
【This chapter is finished reading】