C++ primer Plus 第十三章复习题

1、派生类从基类哪里继承了什么?

成员数据,还有一半的成员函数,

公有成员和保护成员是可见得,私有成员不可见,

2、派生类不能从基类哪里继承什么?

构造函数,析构函数,赋值运算符,还有友元函数,都不能继承。

3、假设baseDMA::operator=()函数得函数返回类型为void,而不是baseDMA&,这将有什么后果?如果返回类型为baseDMA,而不是baseDMA&,又将有什么后果?

返回类型为void,可以进行单个赋值,但是不能进行连续的赋值,例如a=b=c这种情况

返回了baseDMA,则返回一个副本,增加程序的消耗,效率降低。

4、创建和删除派生类对象时,构造函数和析构函数得调用顺序是怎样的?

创建的适合先调用基类得构造函数,析构得时候先调用派生类的析构函数。

5、如果派生类没有添加任何数据成员,它是否需要构造函数?

需要,构造函数是不能继承自基类得,即使自己不写,系统也会生成一个默认得。

6、如果基类和派生类定义了同名的方法,当派生类对象调用该方法时,被调用的将是哪个方法?

调用的是派生类的方法。

7、在什么情况下,派生类应定义赋值运算符?

在派生类得构造函数使用了new或者new[]来初始化指针成员的时候。

(在派生类新增的数据成员是指针时,需要定义赋值运算符。)

8、可以将派生类对象的地址赋值给基类指针吗?可以将基类对象的地址赋值给派生类指针吗?

前者是可以的,相当于基类指针指向派生类对象;

后者一般不行,因为这样做的结果不确定,如果派生类指针指向基类对象,并使用了派生类的方法,就可能导致错误。

9、可以将派生类对象赋给基类对象吗?可以将基类对象赋给派生类对象吗?

前者是可以的,会调用复制构造函数或者赋值运算符,然后将派生类对象强制类型转换为基类对象完成。

后者如果没有显式声明以基类对象为参数的构造函数、或赋值运算符,那么是不行的。

10、假设定义了一个函数,它将基类对象的引用作为参数。为什么该函数也可以将派生类对象作为参数。

因为基类的指针、引用,可以指向派生类的对象,但它只能使用基类的方法。

11、假设定义了一个函数,它将基类对象作为参数(即函数按值传递基类对象),为什么该函数也可以将派生类对象作为参数?

因为再按值传递中,派生类对象被强制类型转换为了基类对象来使用(使用基类复制构造函数创造了一个基类的对象),所以可以。

12、为什么通常按引用传递比按值传递对象的效率更高?

因为按引用传递不需要创造临时对象,也不需要使用复制构造函数,节约了从实参到形参,从函数内部对象到函数返回值过程中创造临时对象函数的时间和计算,因此效率更高。按引用传递,还可以确保函数从虚函数受益。

13、假设corporation是基类,PublicCorporation是派生类,再假设这两个类都定义了head()函数,ph是指向Corporaction类型的指针,且被赋给了一个PublicCorporation对象的地址。如果基类将head()定义为:

a.常规非虚方法

b.虚方法

则ph->head()将被如何解释;

a.被解释为调用基类的方法。

b.被解释为调用派生类的方法。

你可能感兴趣的:(c++,开发语言)