//---------------------------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)的更多相关文章

  1. [Effective JavaScript 笔记]第34条:在原型中存储方法

    js中完全有可能不借助原型进行编程.不用在其原型中定义任何的方法. 创建对象 构造函数法 所有属性和方法都在构造函数中定义 function User(name,pwd){ this.name=nam ...

  2. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  3. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  4. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  5. [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象

    js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...

  6. [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符

    “1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...

  7. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  8. [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

    函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...

  9. [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

    js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...

  10. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

随机推荐

  1. 固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异

    固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异 在看这篇文章之前可以先看一下下面的文章: SSD小白用户收货!SSD的误区如何解决 这样配会损失性能?实测6种特殊装机方式 听说固态 ...

  2. Sql Server 中如果使用TransactionScope开启一个分布式事务,使用该事务两个并发的连接会互相死锁吗

    提问: 如果使用TransactionScope开启一个分布式事务,使用该事务两个并发的连接会互相死锁吗? 如果在.Net中用TransactionScope开启一个事务. 然后在该事务范围内启动两个 ...

  3. 使用动态跟踪技术SystemTap监控MySQL、Oracle性能

    [IT168 技术]本文根据吕海波2018年5月11日在[第九届中国数据库技术大会]上的演讲内容整理而成. 讲师介绍: 吕海波,美创科技研究员,ITPUB管理版版主.出版技术书籍<Oracle内 ...

  4. BAT文件语法和技巧

    首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任 ...

  5. 像azure一样桌面显示Windows系统信息

    介绍 我们在使用azure的公有云时,可以看到打开虚拟机时右上角可以显示系统配置信息和公网私有地址,很好奇如何做到的,终于经过询问一位微软的朋友,他帮我找到了这个工具 工具地址:https://tec ...

  6. SQL 的各种 join 用法

    作者丨C.L. Moffatt http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins I am go ...

  7. 第 14 章 结构和其他数据形式(伸缩型数组成员C99)

    伸缩型数组成员C99 声明一个伸缩型数组成员的规则: 1.伸缩型数组成员必须是结构的最后一个成员: 2.结构中必须至少有一个成员: 3.伸缩数组的方括号是空的. 示例 struct flex { in ...

  8. mysql workbench中my.ini路径不一样

    mysql workbench中的my.ini路径与mysql服务中的路径不一样 删除mysql workbench的配置文件即可解决 win7下的配置文件路径: %APPDATA\MySQL\Wor ...

  9. p,np,npc,np难问题,确定图灵机与非确定图灵机

    本文转自豆瓣_燃烧的影子 图灵机与可计算性 图灵(1912~1954)出生于英国伦敦,19岁进入剑桥皇家学院研究量子力学和数理逻辑.1935年,图灵写出了"论高斯误差函数"的论文, ...

  10. shp转oracle spatial

    2010年12月1日  终于搞定了shp到oracle spatial,说下步骤和感受吧! 1 XP系统:转换工具的下载(shp2sdo.exe ):下载后把此文件复制到PATH变量包含的目录下(E: ...