C++ Primer Plus 第十三章复习题答案    

1.若是公有继承,则基类的公有成员成为派生类的公有成员,基类的保护成员成为派生类的保护成员,基类的私有成员被继承,但不能直接访问。

2.不能继承构造函数、析构函数、赋值运算符和友元

3.如果返回类型为void,仍可以使用单个赋值,但是无法使用连锁赋值;返回对象,则该方法的执行速度有所减慢,因为返回语句需要复制对象。

4.先调用基类的构造函数,然后依照派生顺序,依次调用派生类的构造函数;析构函数的调用顺序正好相反。

5.是的,每个类都必须有自己的构造函数。构造函数无法继承。

6.调用派生类方法,仅当派生类没有重新定义方法或使用作用域解析符时调用基类方法。然而,应把所有要重新定义的函数声明为虚函数。

7.派生类构造函数使用new或new[]来初始化类的指针成员时。更普遍地说,如果默认赋值不正确,则应自行定义。

8.当然,向上转换(派生类到基类)是安全的。向下转换可能带来隐患,派生类指针可能会调用基类对象没有定义的新方法,只有通过显式类型转换,才能使基类对象赋给派生类指针。

9.是的,派生类对象的基类部分赋值给基类对象,这将调用基类的赋值运算符函数。仅当派生类定义了转换运算符(包含基类引用为唯一参数的构造函数)或使用基类为参数的赋值运算符时,相反方向的赋值才有可能。

10.C++允许基类引用指向从该类派生出来的任何类型。

11.按值传递对象将调用复制构造函数,形参是基类对象,因此调用基类的复制构造函数。该函数以基类引用作参数,基类引用能指向作为参数传递的派生对象。综上所述,将生成一个新的基类对象,其成员对应派生对象的基类部分。

12.按引用传递对象,可保证函数从虚函数受益。按引用传递对象节省内存和时间,尤其对于大型对象。按值传递的最大优点是能够保护原始数据,但将引用作为const型传递能起到同样的作用。

13.

a.若是常规方法,将调用Corporation::head()

b.若是虚方法,将调用PublicCorporation::head()

14.House包含Kitchen,应使用表示has-a关系的私有继承、而不是表示is-a关系的公有继承。其次,House类的area()定义隐藏了Kitchen类的area(),它们的特征标不同。最后,就算是公有继承,House类也不能直接访问Kitchen类的kit_sq_ft成员。