(一四四)第十三章复习题

1.派生类从基类那里继承了什么?

答:数据成员、非构造函数和析构函数、默认赋值运算符的方法。

基类的私有、保护、公有成员和方法,分别成为派生类的私有、保护、公有的成员和方法,但部分例外。

 

 

2.派生类不能从基类那里继承什么?

答:①构造函数(包括默认和复制);②析构函数;③赋值运算符;④友元

 

 

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

答:

情况①不能使用连续赋值,如:某对象=baseDMA类对象=某对象;

情况②将额外创造一个临时对象,占用更多内存和计算,将调用复制构造函数,对于使用new分配内存的数据成员,可能导致出问题。

 

 

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

答:

①调用构造函数时,会先调用基类的构造函数,再调用派生类的构造函数;

②调用析构函数时,会先调用派生类的析构函数,再调用基类的析构函数。

③如果是连续派生,最早的构造函数会被先调用,然后依次调用;析构函数则相反

 

 

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

答:

如果基类有默认构造函数,那么可以不需要;

如果基类没有默认构造函数,那么需要。

答案说需要,但我实际测试,如果基类有默认构造函数,那么派生类省略构造函数也是可以的。

 

 

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

答:

调用的是派生类的方法。

 

 

 

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

答:

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

 

 

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

答:

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

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

 

 

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

答:

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

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

 

 

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

答:

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

 

 

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

答:

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

 

 

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

答:

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

 

 

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

a.常规非虚方法;

b.虚方法;

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

答:

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

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

 

 

14.下述代码有什么问题?

class Kitchen

{
private:

double kit_sq_ft;

public:

Kitchen(){kit_sq_ft=0.0;}

virtual double area() const {return kit_sq_ft * kit_sq_ft;}

};

class House: public Kitchen

{

private:

double al_sq_ft;

public:

House(){all_sq_ft+=kit_sq_ft;}

double area(const char* s)const {cout<<s; return all_sq_ft;}

};

答:

①House类的默认构造函数,没有初始化列表;

②House类的数据成员all_sq_ft没有被初始化(无赋值);

③House类的方法House(),是不能访问基类Kitchen的私有成员的;

④违反了is-a模型,不适合用公有继承。

⑤书上说:House的area()隐藏了Kitchen的area()版本。——但我觉得没问题啊。

 

 

 

 

时间: 2024-11-05 15:00:11

(一四四)第十三章复习题的相关文章

第十三章 枚举类型与位标记[《.net框架程序设计》读书笔记]

.net框架|笔记|程序|设计 第十三章 枚举类型与位标记 一. 枚举类型 1. 使用枚举类型的理由: l 枚举类型是得程序更容易编写.阅读.维护,在代码中使用符号名称代替数字是程序设计的一贯主张. l 强类型的,便于类型检验 2. 注意事项: l 枚举类型继承自System.Enum,System.Enum又继承自System.ValurType l 枚举类型不能定义方法.属性.事件 l 枚举类型为常数而非只读字段,因此可能引入版本问题(见第八章的相关讨论) l 将枚举类型与引用它的类型定义在

mysql-《疯狂java实战演义》里面的第十三章MySQL管理器程序有没有做出往数据库导入Excel表的?

问题描述 <疯狂java实战演义>里面的第十三章MySQL管理器程序有没有做出往数据库导入Excel表的? 本人想在MySQL管理器程序源代码里面加上导入表的代码,但是总是失败,想向个位请教一下,有人这么做过吗,能否给一下代码,谢谢! 解决方案 http://download.csdn.net/detail/qianfu123/3589697 源代码,自己下

求大神解答一下-C++ primer plus 第6版 中文版 第16章复习题的一个问题

问题描述 C++ primer plus 第6版 中文版 第16章复习题的一个问题 奇葩的是课后居然没答案...... 求正规.严谨.简洁的标准答案! 程序清单16.15(在p708页):functor.cpp //functor.cpp--using a functor #include尖括号iostream尖括号 #include尖括号list尖括号 #include尖括号iterator尖括号 #include尖括号algorithm尖括号 template//functor class

python 教程 第十三章、 特殊的方法

第十三章. 特殊的方法 1)    特殊的方法 __init__(self,...) 这个方法在新建对象恰好要被返回使用之前被调用. __del__(self) 恰好在对象要被删除之前调用. __str__(self) 在我们对对象使用print语句或是使用str()的时候调用. __lt__(self,other) 当使用 小于 运算符(<)的时候调用.类似地,对于所有的运算符(+,>等等)都有特殊的方法. __getitem__(self,key) 使用x[key]索引操作符的时候调用.

第十三章——表和索引分区(2)——使用拆分删除和加载大数据

原文:第十三章--表和索引分区(2)--使用拆分删除和加载大数据 前言:         很多时候需要对大数据量进行归档或者删除,并周期性加载大数据量到一个大表中,现在来做个简单的例子,你经常需要删除大数据量表中的大量数据.同时,你想加载大量数据到这个表中,当表中数据有数十亿时,这个操作可能消耗几个小时,但是如果你的表有分区,那么执行起来会很有效. 本文将模拟删除一个季度的数据,并加载整个季度到现有表,其中使用了拆分(splitting).合并(merging)和切换分区(switching).

ADO.net 2.0技术内幕第十三章中提到的BLOB应用程序示例哪可以找到

问题描述 ADO.net2.0技术内幕第十三章中提到的BLOB应用程序示例哪可以找到?在MS网站上下载的源码压缩包里找不到这个东东?

第十三章——表和索引分区(1)——使用Range Left进行表分区

原文:第十三章--表和索引分区(1)--使用Range Left进行表分区 前言: 如果数据表的数据持续增长,并且表中的数据量已经达到数十亿甚至更多,数据的查询和操作将非常困难,面对非常庞大的表,几时简单的增删改操作都会花费非常多的时间,如删除某个数据然后重建索引这些操作,会很难实现.在这种情况下,管理和维护查询性能就成为了一种挑战. 在过去的日子,也就是2005之前,你可能需要使用分区视图来处理大数据量的数据,从2005开始,微软引入了叫做表分区的新特性.允许水平分割数据成为多个分区.并且也允

【书评:Oracle查询优化改写】第五至十三章

[书评:Oracle查询优化改写]第五至十三章 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 字符串的处理 ② 常用分析函数 ③ 用sql输出九九乘法表     本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力.     一.2.2  实验环境介绍   oracle 11g   一.2.3  相关

(六十三)第四章复习题

注:以下需要头文件的,一般都注明了头文件,但可能省略掉了int main(){}或者using namespace std;这样的代码,只写了关键代码.   1.如何声明下列数据? a.actor是由30个char组成的数组. b.betsie是由100个short组成的数组. c.chuck是由13个float组成的数组. d.dipsea是由64个long double组成的数组. 答: char actor[30]; short betsid[100]; float chuck[13];