effective c++ 笔记 (31-34)
//---------------------------15/04/20----------------------------
//#32 确定你的public继承塑膜出 is-a
关系
{
/*
1>子类is-a父类。
如果以public形式继承,你便是告诉c++编译器说,每一个类型为子类的对象同时也是一个父类的对象。
也就是父类表现出更一般化的概念。
2>只要是父类能用到的地方,子类也一定能有用,但是如果什么地方子类能用,父类就不一定能用了。
3>is-a的困惑点:
1)bird能飞,企鹅是bird,所以也能飞:
这里首先bird并不是都能飞的,所以这里应该分类成flybird和notflybird。企鹅就能继承
notflybird了。
然而有些系统并不会用到企鹅,而且能飞的bird还是很多的,所以可以适当考虑不去区分能不能飞
也就是学会灵活变通。
2)正方形是一个矩形:
矩形调整长度的时候,宽度是不会变的,但是正方形调整长度的时候,宽度要跟着变化。
所以解决办法是改写正方形的SetWidth和SetHeight,让这两个函数在改动一个时,另一个跟着变。
毕竟正方形是一个特殊的长方形,你要改变我的长,ok,宽度也必须跟着变。
*/
}
//#33 避免遮掩继承而来的名称
{
// 先看看下面的代码:
class Base
{
public:
virtual void mf1();
virtual void mf1(int);
virtual void mf3();
virtual void mf3(int);
};
class Derived : public base
{
virtual
void mf1();//并没有定义mf1(int),所以基类的mf1(int)就被遮盖了。
using Base::mf1;
//这样才能让mf1(int)被看见。
virtual void mf3()
{
Base::mf3(); //!!!!!如果是private继承!!!!!!!(不是private继承就不要这么做),这么做
//可以故意遮盖基类的mf3(int),只留下基类的mf3()
}
};
}
//#34 区分接口继承和实现继承
{
/*
1:子类继承接口总是有三种情况:
1>只继承函数接口,不继承实现:pure virtual函数能实现这样的功能。
2>继承接口和缺失实现: impure virtual函数。这时会有可能造成危险情况。因为这个接口没有要求客户强制
实现,所以如果在有必要的情况下,客户却没有实现,则会造成错误。
解决办法就是:基类提供一个缺失实现的成员函数,子类继承接口的时候,如果想要缺省实现,直接调用基类
提供的成员函数就行。这时接口声明成pure virtual的,子类就必须重新实现,至于要不要缺省情况,就看子类
自己调不调用了。
3>继承接口和强制性实现(不允许修改),non_virtual函数。声明为non_virtual意味着基类不想子类重定义这个
接口。
2:错误情况:
1>全部实现为non_virtual函数,这一的设计使得子类无法定制自己的情况。而且析构函数必须是virtual的(如
果你想让这个类作为基类的话)
2>全部实现为virtual,例外:interface classes,除了这个类接口,其他的类不应该把接口全设置为virtual
因为这可能是class设计者缺乏坚定立场的前兆。某些函数就是不该被重定义的!
*/
}
effective c++ 笔记 (31-34)的更多相关文章
- [Effective JavaScript 笔记]第34条:在原型中存储方法
js中完全有可能不借助原型进行编程.不用在其原型中定义任何的方法. 创建对象 构造函数法 所有属性和方法都在构造函数中定义 function User(name,pwd){ this.name=nam ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象
js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...
- [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符
“1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
- [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...
- [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法
js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...
- java effective 读书笔记
java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...
随机推荐
- SHELL调用存储过程
1.测试用例 #!/bin/sh #日期变量可设成传入参数 #exec_date=`date +"%Y%m%d"` # -S 设置无提示模式, 该模式隐藏命令的 SQL*Plus ...
- Bitlocker驱动器加密使用
前言 Bitlocker驱动器加密可以将磁盘加密,确保数据的安全.如果被加密保护的磁盘是Windows Server 2012操作系统磁盘,即使他被拿到另外一台计算机启动,除非已解锁,否则无法启动 ...
- div中文本水平居中,垂直居中
div: text-align=center; hight=100px; line-hight=100px;(行高需要和高度设置成一样)
- mysql用户管理与权限
1.设置密码 set password for 用户名@localhost = password('密码'); 2.取消密码 set password for 用户名@localhost = pass ...
- 牢记 31 种 CSS 选择器用法
原文 The 30 CSS Selectors you Must Memorize 由 Jeffrey Way 发表于 2011 年 6 月,介绍了 30 种最常用的 CSS 选择器用法,多加了一种, ...
- [技术] OIer的C++标准库 : 字符串库
引入 上次我在博客里介绍了OI中可能用到的STL中的功能, 今天我们接着来发掘C++标准库中能为OI所用的部分. 点击传送至我的上一篇系列博文 众所周知, OI中经常用到字符串相关的处理, 这时善用字 ...
- [LOJ 6031]「雅礼集训 2017 Day1」字符串
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...
- U-Mail:如何实现EDM的个性化和定制化?
设想一下,一个上班族一天要接到多少垃圾邮件?据媒体报道,目前来往的邮件中,高达95%以上的是垃圾邮件,而且有些垃圾邮件还会故意占据着邮箱的最前列.同时,随着人们接受资讯越来越快捷便利,渠道越来越多,也 ...
- Centos7 Nginx 开机启动
Centos 系统服务脚本目录: 用户(user) 用户登录后才能运行的程序,存在用户(user) /usr/lib/systemd/ 系统(system) 如需要开机没有登陆情况下就能运行的程序,存 ...
- 请问下.net俱乐部这个组织现在还存在么?
各位好,我是北京的一名.net开发人员,一直在想有什么线下技术活动可以开拓自己的视野,扩展人脉,我知道曾经有一个.net俱乐部很活跃 可是现在我在百度上搜了下.net俱乐部的信息,已经基本找不到201 ...