第十五章 15.6节练习 & 15.7.1节练习
2014-09-20 11:43
148 查看
练习15.23
假设第550页的D1类需要覆盖它继承而来的fcn函数,你应该如何对其进行修改?如果你修改之后fcn匹配了Base中的定义,则该节的那些调用语句将如何解析?
解答:
对于第二问的理解,我认为应该是在D1中重载fcn()后,依旧想要调用Base中的fcn()
练习15.24
哪种类需要虚析构函数?虚析构函数必须执行什么样的操作?
解答:
【引用百度百科】
虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。
如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。
所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。
抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。
虚析构函数能够确保delete基类指针时将运行正确的析构函数版本。
假设第550页的D1类需要覆盖它继承而来的fcn函数,你应该如何对其进行修改?如果你修改之后fcn匹配了Base中的定义,则该节的那些调用语句将如何解析?
解答:
class D1 :public Base{ public: int fcn(){ cout << "D1 fcn()" << endl; return 1; } int fcn(int a){ cout << "D1 fcn(int)" << endl; return 0; } virtual void f2(){ cout << "D1 f2" << endl; } };
对于第二问的理解,我认为应该是在D1中重载fcn()后,依旧想要调用Base中的fcn()
class D1 :public Base{ public: using Base::fcn; int fcn(){ cout << "D1 fcn()" << endl; return 1; } int fcn(int a){ cout << "D1 fcn(int)" << endl; return 0; } virtual void f2(){ cout << "D1 f2" << endl; } };这里使用using声明语句指定一个名字,这样派生类中使用到的就是这个基类的函数定义了,即使重载了这个函数,使用的依旧是基类中的定义。
练习15.24
哪种类需要虚析构函数?虚析构函数必须执行什么样的操作?
解答:
【引用百度百科】
虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。
如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。
所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。
抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。
虚析构函数能够确保delete基类指针时将运行正确的析构函数版本。
相关文章推荐
- 第十五章 15.8.1节练习 & 15.9.1节练习
- 第十五章 15.7.2节练习 & 15.7.3节练习
- 第十五章 15.7.4节练习 & 15.8节练习
- Windows Phone 7 Dev (WP7 开发其实很简单) 稍微讲解_微软商店上架应用<<猜数字>>,适合初学者作为小练习,但是也很耗时
- Java程序练习-Peter's smokes
- 【html5每日练习】 html5 canvas "米"
- 练习&复习
- 《java编程思想》第四章 练习9&练习10
- HTML[CSS+DIV] 网站布局练习 Zun'Showing
- java例程练习(BorderLayou&GridLayout)
- java例程练习(图像编程[Frame&Panel])
- Java Q&A: 抽象类和接口 - 实战练习
- 【C编程练习】2013华为校园招聘机试题9月10日题2:计算整数二进制表达式中0的个数 最左边1前面的0不考虑 void GenZeroNum(int nVal, int& nZeroNum);
- 黑马程序员->集合类 (3 代码练习
- java例程练习(BorderLayou&GridLayout)
- java"循环结构"练习实例
- shell练习:svndiff & change_ip
- Python自然语言处理学习笔记(8):1.6-1.8 小结&深入阅读&练习
- 第十五章动态规划之“O(n^2)时间寻找n个数构成序列的最长递增子序列”(练习15.4-5)
- 《数论》3.6习题3------求一元线性同余方程所有解(不是方程组)基础练习例子&&求逆元