宁可拿non-member non-friend函数替换member函数.这样做可以增加封装性.包裹弹性(packaging flexibility)和机能扩充性.…
(一) 有个class来表示网页浏览器: class WebBrowser { public: void clearChache(); void clearHistory(); void removeCookies(); }; 很多用户会想一整个运行全部这些动作,因此WebBrowser也提供这样一个函数:clearEverything class WebBrowser { public: void clearChache(); void clearHistory(); void removeC…
1.non-member方法与member方法没有本质区别,对于编译器来说,都是non-member方法,因为member方法绑定的对象,会被编译器转化为non-member方法的第一个形参.non-member方法与member方法唯一的区别是:member方法封装性更差,因为它可以访问private成员. 2.根据面向对象的要求,数据与方法应该和对象捆绑在一起,这意味着应该使用member方法.其实,这个建议是错误的.为什么? 3.首先,non-member.non-friend方法提供更大…
考虑下面这种经常出现的使用方式: class webBroswer{ public: ... void clearCache(); void clearHistory(); void removeCookies(); ... }; 那么很自然的就会想到增加这么一种清理方式: class WebBrowser{ public: ... void clearEverything(); }; 或者是这么一种清理方式: void clearBrowser(WebBrowser & wb) { wb.cl…
NOTE : 1.宁可拿non-member non-friend 函数替换member函数.这样做可以增加封装性/包裹单性(packaging flexibility)和机能扩展性.…
作者在这一节中花了大幅度的篇幅来介绍为什么最好使用non-member.non-friend函数. 思路如下: 场景:如果有一个class用来表示网页浏览器,那么清楚缓存及历史记录的时候,我们可能定义下面的类: class Web { public: void clearCache(); void clearCookies(); void clearHistory(); } 但是也有可能用户需要一下子全部清除这些信息,于是我们再定义下面这个成员函数: class Web {public: voi…
#define offsetof(struct_t,member) ((int)&((struct_t *)0)->member) 这个东西很多人应该知道: offsetof是用来判断结构体中成员的偏移位置.他是一个宏定义. (struct_t *)0是一个指向struct_t类型的指针,其指针值为 0,所以其作用就是把从地址 0 开始的存储空间映射为一个 struct_t 类型的对象.((struct_t *)0)->member 是访问类型中的成员 member,相应地 &…
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)宏的运行机理:1. ( (TYPE *)0 ) 将零转型为TYPE类型指针; 2. ((TYPE *)0)->MEMBER 访问结构中的数据成员; 3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址; 4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型.巧妙之处在于将0转 换成(TY…
本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替换成自己想要的字符串的方法re.sub 函数进行以正则表达式为基础的替换工作 下面是一段示例源码 #!/usr/bin/env python #encoding: utf-8 import re url = 'https://113.215.20.136:9011/113.215.6.77/c3pr…
一.SQL中SUBSTRING函数的用法1.功能:返回字符.二进制.文本或图像表达式的一部分2.语法:SUBSTRING ( expression, start, length )3.QL 中的 substring 函数是用来抓出一个栏位数据中的其中一部分.这个函数的名称在不同的数据库中不完全一样:MySQL: SUBSTR(), SUBSTRING()Oracle: SUBSTR()SQL Server: SUBSTRING()4.参数:expression 字符串.二进制字符串.文本.图像.…
Delphi StringReplace – 替换字符函数 Delphi中的StringReplace函数是SysUtils单元中自带的函数,该函数可以替换字符串中的指定字符. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 function StringReplace (const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;   // rfReplaceAll:全部替换…
运行时替换函数对 golang 这类静态语言来说并不是件容易的事情,语言层面的不支持导致只能从机器码层面做些奇怪 hack,往往艰难,但如能成功,那挣脱牢笼带来的成就感,想想就让人兴奋. gohook gohook 实现了对函数的暴力拦截,无论是普通函数,还是成员函数都可以强行拦截替换,并支持回调原来的旧函数,效果如下(更多使用方式/接口等请参考 github 上的单元测试[1],以及 example 目录下的使用示例):                                    …
#include <iostream> #define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) using namespace std; int main(){ struct Demo{ char sex; int id; }; cout << "IOFFSETOF(Demo, sex): " << IOFFSETOF(Demo, sex) << end…
有下面一种情况 class A { private: int a; int b; public: A(int x, int y) :a(x), b(y){} void a_display(){ cout << a << endl; } void b_display(){ cout << b << endl; } }; 你想输出全部的时候 member函数情况 void display(){cout<<a<<b<<endl;…
在前一篇文章,我们提到,使用private来代替public以提高class的封装性.这一篇文章,我们将对接口发起攻势.首先来个简单的例子. class WebBrowser { public: void clearCache(); void clearHistory(); void removeCookies(); void clearEverything() { clearCache(); clearHistory(); removeCookies(); } }; 在上面的例子中,我们定义了…
最近的在写代码的时候,需要用到反射来获取类中的所有公开属性值,于是写下如下代码: StringBuilder sb = new StringBuilder(); foreach (var f in this.GetType().GetFields()) { sb.AppendLine(string.Format( "{0}={1};", f.Name, f.GetValue(this))); } return sb.ToString(); 工作正常,后又在另一处对另外一个类需要获取属性…
1.replaceWith()使用括号内的内容替换所选择的内容.$("#div").replaceWith("<div id="div2">div2</div>");使用方法如上,将ID为div的元素替换为ID为div2的DIV元素. 2.replaceAll()将选择的内容替换到括号内的选择器.$("<div>替换后的内容</div>").replaceAll("p&…
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )该函数返回一个字符串或者数组.该字符串或数组是将subject中全部的search都被replace替换之后的结果.1.$search,要替换的字符串,或数组2.$replace,被用来替换的字符串或数组3.$subject,被查询的字符串或数组4.$count,可选,如果被指定,将为设置为替换的次数5.返回值:该函数返回替换…
php中替换函数主要有strtr(),str_repalce()这两个函数,但你们都知道他们这两个函数的区别和用法吗? 先来看看这个php字符串替换函数 strtr()的两种用法: strtr(string,from,to) 或者strtr(string,array) 首先针对strtr函数第一种方式: 我们看看下面的举例: <?phpecho strtr("I Love you","Lo","lO");?> 得到的结果是: I lO…
<?php $str="as2223adfsf0s4df0sdfsdf"; echo preg_replace("/0/","",$str);//去掉0字符,此时相当于 replace的功能, preg_replace("/0/","A",$str); 这样就是将0变成A的意思了 echo preg_replace("/[0-9]/","",$str);//去掉…
在.NET中,不调用C++/CLI,进行字符串替换有好几种方法: 1.最常用的,就是String实例.Replace(),但这个不能忽略大小写. 2.System.Text.Regex(Regular Expression正则表达式),大家都估计到它的效率不高,虽然它支持忽略大小写. 3.String.SubString()循环,查找要替换的子字符串的位置,截取,然后字符串相加,大家也估计到,数量少(在codeproject.com上曾有文章讨论过和StringBuilder的临届值是600次)…
package util import ( "fmt" "reflect" "regexp" "strconv" "strings" ) func floatToString(f float64) string { return strconv.FormatFloat(f, 'E', -1, 64) } func intToString(i int64) string { return strconv.Fo…
1.assign() 原型: //string (1) basic_string& assign (const basic_string& str); //substring (2) basic_string& assign (const basic_string& str, size_type subpos, size_type sublen); //c-string (3) basic_string& assign (const charT* s); //buf…
今天服务器由于业务需求,需要换成php5.4版本,以前使用的5.3,有些函数过期,导致了许多问题 1.ereg() 使用 preg_match() 替代 int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 int ereg ( string…
阅读此笔记前,请先阅读 <Effective C++>第二版笔记  和  <More Effective C++>笔记 这里只记录与上面笔记不同的条款,主要是 "面对对象+模板+内存管理" 三个方面 1.视 C++ 为一个语言联邦 可以分为 C.C with Object.Template C++.STL 四个次语言,不同次语言的高效编程守则可能不一样,比如 C 部分 pass-by-value 通常比 pass-by-reference 高效,而对于 Obje…
条款18:让接口容易被正确使用,不易被误用 1,好的接口很容易被正确使用,不容易被误用.你应该在你的所有接口中努力达成这些性质. 2,“促进正使用”的办法包括接口的一致性,以及与内置类型的行为兼容. 3,“阻止误用”的办法包括建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任. 4,shared_ptr支持定制型删除器.这可以防范DLL问题,可以用来自动解除互斥锁. 条款19:设计class犹如设计type 博客地址:http://www.cnblogs.com/ronny/ …
条款18:让接口easy被正确使用,不易被误用 1,好的接口非常easy被正确使用,不easy被误用.你应该在你的全部接口中努力达成这些性质. 2,"促进正使用"的办法包含接口的一致性,以及与内置类型的行为兼容. 3,"阻止误用"的办法包含建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任. 4,shared_ptr支持定制型删除器.这能够防范DLL问题,能够用来自己主动解除相互排斥锁. 条款19:设计class宛如设计type 博客地址:http…
四.设计与声明          条款18:让接口容易被正确使用,不易被误用      理想上,如果客户企图使用某个接口而却没有获得他所预期的行为,这个代码不该通过编译:如果代码通过了编译,它的行为就应该是客户所想要的.欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误.    class Data{    public:           Data(int month,int day,int year)            ....     }    …
条款01:视C++为一个语言联邦(View C++ as a federation of languages.) C++主要的四个次语言: (1)C.说到底C++仍是以C为基础:(2)Object-Oriented C++.这部分也就是C with Classes所诉求的:类.封装.继承.多态.虚函数:(3)Template C++.这是C++的泛型编程(generic programming)部分:(4)STL.STL是个template程序库,是非常特殊的一个.它对容器.迭代器.算法以及函数…
条款18:让接口容易被正确使用,不容易被误用 注意使用const,explicit,shared_ptr等来限制接口. 必要时可以创建一些新的类型,限制类型操作,束缚对象等. 注意保持接口的一致性,且与内置类型的行为兼容. class Month { public: static Month Jan(){return Month(1);} static Month Feb(){return Month(2);} ... static Month Dec(){return Month(12);}…