effective c++ 笔记 (31-34)】的更多相关文章

js中完全有可能不借助原型进行编程.不用在其原型中定义任何的方法. 创建对象 构造函数法 所有属性和方法都在构造函数中定义 function User(name,pwd){ this.name=name; this.pwd=pwd; this.toString=function(){ return '[User '+this.name+']'; }; this.checkPwd=function(pwd){ return hash(pwd)===this.pwd; } } 这样创建没有什么问题,…
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} 有些个算法对有序的和无序的数据都能应用,但多数情况下,他们在输入数据有序时才最有用. 下列算法要求输入数据必须有序…
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} Table of Contents partial_sort nth_element stability partition 总结 1 parti…
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 通过私有构造器强化不可实例化的能力 第5条 避免创建不必要的对象 第6条 消除过期的对象引用 第7条 避免使用终结方法 第1条 考虑用静态工厂方法代替构造器 对于类而言, 最常用的获取实例的方法就是提供一个公有的构造器, 还有一种方法, 就是提供一个公有的静态工厂方法(static factory…
js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //"number" typeof “s”;//"string" typeof null;//"object":ECMAScript把null描述为独特的类型,但返回值却是对象类型,有点困惑. 可以使用Object.prototype.toString.ca…
“1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaScript笔记]第3条:当心隐式的强制转换> 因为这个会在比较之前对两个值都进行隐式转换.字符串“1.0e0”被解析成1,而{valueOf:function(){return true;}}会通过调用自身的valueOf进行转化得到true,然后再转化为数字,得到1; 很容易使用强制转换完成一些工作.如…
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在看对应内容的时候,把高3等工具书籍放在一边,边查边看收获很大.这章重点围绕函数的相关属性,方法,参数,关键字,命名,柯里化,高阶,闭包等内容作了各种提示.下面只是个人对于各条内容的一些总结,知识面有限,如有不对请大家一定指出.真心希望大家可以给点指导,个人写博客,感觉一直没人交流很没有动力的. 第1…
函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式传递给eval函数以达到同样的功能.程序员面临一个选择:应该将代码表示为函数还是字符串?毫无疑问,应该将代码表示为函数.字符串表示代码不够灵活的一个重要原因是:它们不是闭包. 闭包回顾 看下面这个图 js的函数值包含了比调用它们时执行所需要的代码还要多的信息.而且js函数值还在内部存储它们可能会引用…
js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+1}" 反射获取函数源代码的功能很强大,使用函数对象的toString方法有严重的局限性.toString方法的局限性ECMAScript标准对函数对象的toString方法的返回结果(即该字符串)并没有任何要求.这意味着不同的js引擎将产生不同的字符串,甚至产生的字符串与该函数并不相关. 如果函数…
java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 singleton 不知道怎么操作,觉得意义不大 单例模式 私有化构造器不能实例化,也不可被子类继承 能用原生类的就尽量不用对象 []对于所有对象都通用的方法 reflexivity 自反性 symmetry 对称性 []类成员 降低可访问性 尽量把公有域 变成私有域,并提供 访问和修改的 get se…
Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer 中间两次笔记被删掉了,简单补一下: Item 3 中提到如果将对象直接放入容器中,可能会引发问题: 大量的拷贝行为要求对象的拷贝构造代价要小 试图将派生类放入存放基类的容器中会引发 Slicing 问题. 对此的简单方法就是在容器中保存对象 指针 ,但如果直接保存指针的话,我们需要自己维护和管理内存,容易混乱.最好的方法是保存 智能指针(smart pointer shared…
Item 5: Know what functions C++ silently writes and calls 在C++中,编译器会自己主动生成一些你没有显式定义的函数,它们包含:构造函数.析构函数.复制构造函数.=运算符. 有时为了符合既有设计.我们不希望自己主动生成这些函数.我们能够把它们显式声明为private. 此时在使用这些类的客户看来,它们就像不存在一样. class Empty{ public: // 默认构造函数 Empty(){} // 拷贝构造函数 Empty(const…
1. 牵一发而动全身 现在开始进入你的C++程序,你对你的类实现做了一个很小的改动.注意,不是接口,只是实现:一个私有的stuff.然后你需要rebuild你的程序,计算着这个build应该几秒钟就足够了.毕竟,只修改了一个类.你点击了build 或者输入了make( 或者其他方式),你被惊到了,然后羞愧难当,因为你意识到整个世界都被重新编译和重新链接了!当这些发生时你不觉的感到愤恨么? 2. 编译依赖是如何发生的 问题出在C++并不擅长将接口从实现中分离出来.类定义不仅指定了类的接口也同时指定…
31 : Minimize compilation dependencies between files 1 这关乎C++的类(或说都是类惹的祸) 1.1 C++类定义式的问题 C++类定义式不只叙述了class接口,还包括十足的实现细目.将导致编译依存关系(compilation dependency),更严重的将导致 连串编译依存关系(cascading compilation dependencies),会对许多项目造成难以形容的灾难. 通常是指类的内部成员,解决方法有两种 1.1.1 p…
ES5引入Object.getPrototypeOf函数作为获取对象原型的标准API,但由于之前的很多js引擎使用了一个特殊的__proto__属性来达到相同的目的.但有些浏览器并不支持这个__proto__属性,所以并不是完全兼容的.例如对于拥有null原型的对象,不同的环境结果就不同了. var empty=Object.create(null); '__proto__' in empty;//一些环境会返回false,另一些会返回true 这就导致结果的不一致,从而影响到依赖这个判断的相关…
Differentiate between inheritance of interface and inheritance of implementation. 行为含义 声明一个pure virtual函数得目的是为了让derived classes只继承函数接口. (你必须提供一个接口,但我不干涉你如何实现它) class Shape { virtual void draw() = 0; }; ... Shape *ps1 = new Rectangle; ps1->Shape::draw…
//---------------------------15/03/26---------------------------- 3:const函数的哲学思辨:就当是科普知识吧!如果成员函数是const意味着什么? 这里有两个流行的概念: 1>bitwise(按位) constness(const + ness ==const的名词)又称physical constness 这个阵营的人相信,只有不改变对象的任何一个bit的函数才可以称为const函数,但是很多成员函数 并不具备const性质…
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类(HashMap,HashSet等)将不能正常工作. 8.覆盖equals时请遵守通用约定 无需覆盖equals的情形: 类的每个实例本质上是唯一的.类代表的是活动实体而不是值的概念.(例如,类Thread) 不关心类"逻辑相等"的功能,从Object继承的equals实现已经足够.(例如,…
30.用enum代替int常量 枚举类型是指由一组固定的常量组成合法值的类型.在java没有引入枚举类型前,表示枚举类型的常用方法是声明一组不同的int常量,每个类型成员一个常量,这种方法称作int枚举模式.采用int枚举模式的程序是十分脆弱的,因为int值是编译时常量,若与枚举常量关联的int发生变化,客户端就必须重新编译. java枚举类型背后的思想:通过公有的静态final域为每个枚举常量导出实例的类.因为没有可以访问的构造器,枚举类型是真正的final.客户端既不能创建枚举类型的实例,也…
这本书中就像它前言中说的那样,这本书不是给初学者的.需要一定的基础,而且有一定的编码实践,才能很好的理解书里讲到的内容.学习一门编程语言,需要熟悉它的语法.形式和结构,这样才会编写合法的.符合语义的.具有意义和行为正确的程序.此书的目的是加深理解如何有效地使用js构建更可预测的.可靠和可维护的js应用程序和库.所有章节都是围绕着这几块来展开的. 目录 第1章 让自己习惯JavaScript 第1条:了解你使用的js版本 第2条:理解JavaScript的浮点数 第3条:当心隐式的强制转换 第4条…
前言 对象是js中的基本数据结构.对象在js语言编码中也随处可见,比如经常会用到的函数,也是一个Function构造函数,Function.prototype原型对象.每当声明一个函数时,都会继承Function.prototype里的方法和属性.当使用"1,2,3".split(',')时,实际是把"123"先转化为String对象,然后调用String对象的原型方法.这些初期时只会用用,但它里面怎么去完成这些的不是很清楚.通过这章的学习,了解得更加深入了.js中…
使用Adb shell command直接送key event給Androidadb shell input keyevent 7 # for key '0'adb shell input keyevent 8 # for key '1'adb shell input keyevent 29 # for key 'A'adb shell input keyevent 54 # for key 'B'adb shell input text "ANDROID" 使用方式adb shell…
1.  视C++为一个语言联邦 C++高效编程守则视状况而变化,取决于你使用C++的哪一部分. 2.  尽量以const,enum.inline替代#define 1) 对于单纯常量,最好以const对象或enum替换#define 2) 对于形似函数的宏.最好改用inline函数替换#define 3)宁能够编译器替换预处理器 4)用define定义的名称并没有进入符号表.无法对其进行跟踪 3.  尽可能使用const 1)假设keywordconst出如今星号左边.表示被指物是常量:右边,指…
// //  effective c++.cpp //  笔记 // //  Created by fam on 15/3/23. // // //---------------------------15/03/23---------------------------- //#01   视c++为一个语言联邦 { /* 1:c++如今支持的编程形式: 1:过程形式  2:面向对象形式  3:函数形式   4:泛型形式   5:元编程形式 2:c++的4个次语言: 1> c: 说到底c++还是…
本系列作为Effective JavaScript的读书笔记. 在ES5中引入了Object.getPrototypeOf作为获取对象原型对象的标准API.可是在非常多运行环境中.也提供了一个特殊的__proto__属性来达到相同的目的. 由于并非全部的环境都提供了这个__proto__属性,且每一个环境的实现方式各不同样,因此一些结果可能不一致: // 在某些环境中 var empty = Object.create(null); // object with no prototype "__…
js对象的核心是一个字符串属性名与属性值的映射表.使用对象实现字典易如反掌,字典是可变长的字符串与值的映射集合. for...in js提供了枚举一个对象属性名的利器--for...in循环. var dict={zhangsan:34,lisi:24,wangwu:62}; var people=[]; for(var name in dict){ people.push(name+":"+dict[name]); } people;//["zhangsan:34"…
条款26:尽可能延后变量定义式的出现时间 博客地址:http://www.cnblogs.com/ronny/ 转载请注明出处! 有些对象,你可能过早的定义它,而在代码执行的过程中发生了导常,造成了开始定义的对象并没有被使用,而付出了构造成本来析构成本. 所以我们应该在定义对象时,尽可能的延后,甚至直到非得使用该变量前一刻为止,应该尝试延后这份定义直到能够给它初值实参为止. 这样做的好处是:不仅可以避免构造(析构)非必要对象,还可以避免无意义的default构造行为. 遇到循环怎么办?此时往往我…
Person类: package com.yfs.javase; import java.util.Date; public class Person implements Comparable { private String name; private int age; private char sex; public static Date date = new Date(); @Override public int hashCode() { final int prime = 31;…
条款26:尽可能延后变量定义式的出现时间 博客地址:http://blog.csdn.net/cv_ronny 转载请注明出处! 有些对象,你可能过早的定义它,而在代码运行的过程中发生了导常,造成了開始定义的对象并没有被使用,而付出了构造成本来析构成本. 所以我们应该在定义对象时,尽可能的延后,甚至直到非得使用该变量前一刻为止,应该尝试延后这份定义直到可以给它初值实參为止. 这样做的优点是:不仅能够避免构造(析构)非必要对象,还能够避免无意义的default构造行为. 遇到循环怎么办?此时往往我…
单例模式:"一个类有且仅有一个实例,并且自行实例化向整个系统提供." 单例模式实现方式有多种,例如懒汉模式(等用到时候再实例化),饿汉模式(类加载时就实例化)等,这里用饿汉模式方法实现,也就是类加载就实例化,单例模式应用场景有很多,比如一个应用有一套窗口化界面,Servlet中只有一个实例,应用很广泛 package com.test; public class Singleton { private Singleton() {} private static final Single…