《C++ Primer Plus(第六版)》(29)(第十四章 C++中的代码重用 复习题答案)
2016-12-28 21:14
676 查看
14.6 复习题
1.以A栏的类为基类时,B栏的类采用共有派生还是私有派生更合适。
2.假设有下面的定义:
假设Gloam版本的tell()应显示glip和fb的值,请为这3个Glom方法提供定义。
3.假设有下面的定义:
4.假设有下面的定义,它是基于程序清单14.13中的Stack模板和程序清单14.10中的Worker类的:
Stack<Worker * > sw;
请写出将生成的类声明。只实现类声明,不实现非内联类方法。
5.使用本章中的模板定义对下面内容进行定义:
string对象数组
double数组栈
指向Worker对象的指针栈数组。
程序清单14.18生成了多少个模板类定义?
ArrayTP<string> sa;
StackTP<ArrayTP<double> > stack_arr_db;
ArrayTP< StackTP<Worker*> > arr_stk_wpr;
程序清单14.18,生成了四种模板:ArrayTP<int, 10>, ArrayTP<double, 10>,ArrayTP<int,5>,Array<ArrayTP<int,5>,10>
6.指出虚基类与非虚基类之间的区别。
对于非虚基类,如果两条继承路线有相同的祖先,则类中将包含祖先成员的两个拷贝
虚基类可以解决这种问题。
1.以A栏的类为基类时,B栏的类采用共有派生还是私有派生更合适。
A | B | 派生类型 |
class Bear | class PolarBear | 公有派生 |
class Kitchen | class Home | 私有派生 |
class Person | class Programmer | 公有派生 |
class Person | class HorseAndJockey | 私有派生 |
class Person, class Automobile | class Driver | 人是公有派生,汽车是私有派生 |
class Frabjous { private: char fab[20]; public: Frabjous(const char* s = "C++") :fab(s){} virtual void tell(){ cout << fab; } }; class Gloam { private: int glip; Frabjous fb; public: Gloam(int g = 0, const char* s = "C++"); Gloam(int g, const Frabjous& f); void tell(); };
假设Gloam版本的tell()应显示glip和fb的值,请为这3个Glom方法提供定义。
class Frabjous { private: char fab[20]; public: Frabjous(const char* s = "C++") { strcpy_s(fab, 20, s); } virtual void tell(){ cout << fab; } }; class Gloam { private: int glip; Frabjous fb; public: Gloam(int g = 0, const char* s = "C++") :fb(s), glip(g){} Gloam(int g, const Frabjous& f) : fb(f), glip(g){} void tell() { fb.tell(); cout << glip << endl; } };好像VS对一些字符串的处理有了更多的限制。
3.假设有下面的定义:
class Frabjous { private: char fab[20]; public: Frabjous(const char* s = "C++") { strcpy_s(fab, 20, s); } virtual void tell(){ cout << fab; } }; class Gloam : private Frabjous { private: int glip; public: Gloam(int g = 0, const char* s = "C++"); Gloam(int g, const Frabjous& f); void tell(); };假设Gloam版本的tell()应显示glip和fab的值,请为这3个Gloam方法提供定义。
class Frabjous { private: char fab[20]; public: Frabjous(const char* s = "C++") { strcpy_s(fab, 20, s); } virtual void tell(){ cout << fab; } }; class Gloam : private Frabjous { private: int glip; public: Gloam(int g = 0, const char* s = "C++") :Frabjous(s), glip(g){} Gloam(int g, const Frabjous& f) : Frabjous(f), glip(g){} void tell() { Frabjous::tell(); cout << glip << endl; } };
4.假设有下面的定义,它是基于程序清单14.13中的Stack模板和程序清单14.10中的Worker类的:
Stack<Worker * > sw;
请写出将生成的类声明。只实现类声明,不实现非内联类方法。
class Stack<Worker*> { private: enum{ MAX = 10 }; Worker* items[MAX]; int top; public: Stack(); bool isempty(); bool isfull(); bool push(const Worker*& item); bool pop(Worker* & item); }; Stack<Worker*>::Stack() { top = 0; } bool Stack<Worker*>::isempty() { return top == 0; } bool Stack<Worker*>::push(const Worker*& item) { if (top < MAX) { items[top++] = item; return true; } else { return false; } } bool Stack<Worker*>::pop(Worker* & item) { if (top > 0) { item = items[--top]; return true; } else { return false; } }
5.使用本章中的模板定义对下面内容进行定义:
string对象数组
double数组栈
指向Worker对象的指针栈数组。
程序清单14.18生成了多少个模板类定义?
ArrayTP<string> sa;
StackTP<ArrayTP<double> > stack_arr_db;
ArrayTP< StackTP<Worker*> > arr_stk_wpr;
程序清单14.18,生成了四种模板:ArrayTP<int, 10>, ArrayTP<double, 10>,ArrayTP<int,5>,Array<ArrayTP<int,5>,10>
6.指出虚基类与非虚基类之间的区别。
对于非虚基类,如果两条继承路线有相同的祖先,则类中将包含祖先成员的两个拷贝
虚基类可以解决这种问题。
相关文章推荐
- 《C++ Primer Plus(第六版)》(30)(第十四章 C++中的代码重用 编程题答案)
- 《C++ Primer Plus(第六版)》(28)(第十四章 C++中的代码重用 笔记)
- 《C++ Primer Plus(第六版)》(35)(第十六章 string类和标准模板库 复习题答案)
- 《C++ Primer Plus(第六版)》(40)(第十七章 输入、输出和文件 复习题和答案)
- 2012/2/3 《C++ Primer Plus》第十四章:C++中的代码重用 学习笔记
- 【今日学习】C++ Primer Plus 第六版——RTTI、代码重用(上)
- 《C++ Primer Plus(第六版)》(23)(第十二章 类和动态内存分配 复习题和答案)
- 《C++ Primer Plus(第六版)》(11)(第八章 函数探幽 复习题答案)
- 【读书笔记:C++ primer plus 第六版 中文版】第14章 C++中的代码重用
- 《C++ Primer Plus(第六版)》(32)(第十五章 友元、异常和其他 复习题答案)
- c++ Primer Plus(第六版)第十四章习题,写代码之路
- 《C++ Primer Plus(第六版)》(44)(第十八章 探讨C++新标准 复习题和答案)
- 2012/2/3 《C++ Primer Plus》第十四章:C++中的代码重用 学习笔记
- 《C++ Primer Plus(第六版)》(16)(第十章 对象和类 笔记和复习题答案)
- 《C++ Primer Plus(第六版)》(19)(第十一章 使用类 复习题答案)
- C++ Primer Plus第六版 第十四章 编程练习答案
- C++PRIMER PLUS第六版课后编程答案 5.1-5.5
- C++ Primer Plus 第六版课后编程答案 2.6-2.7
- C++PRIMER PLUS第六版课后编程题答案 3.1-3.7
- C++PRIMER PLUS第六版课后编程答案 5.6-510