??xml version="1.0" encoding="utf-8" standalone="yes"?>久久午夜免费视频,国产免费久久精品99re丫y,亚洲嫩草影院久久精品 http://www.shnenglu.com/zhaoyao91/category/16351.html学习ȝ与经验交?/description>zh-cn Tue, 07 Jun 2011 06:26:07 GMT Tue, 07 Jun 2011 06:26:07 GMT 60 C++中对点数的格式化显C?/title> http://www.shnenglu.com/zhaoyao91/archive/2011/05/31/147740.html今晚打老虎 今晚打老虎 Tue, 31 May 2011 03:38:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/05/31/147740.html http://www.shnenglu.com/zhaoyao91/comments/147740.html http://www.shnenglu.com/zhaoyao91/archive/2011/05/31/147740.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/147740.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/147740.html 以下是{帖内容: -------------------------------------------------------------------------------------------------------------------------------------------------------------- W二电脑|导读: 框、关pL据库、金融程序、SMSE序及一切处理数据文件的E序Q需要控制小数点后的数位的情况非常普遍Q本文中要讲解如何用简单的Ҏ来控制小CQ另外,q要揭开字符串及数据_ֺ的一点点秘密。 问题的引出 如有一个函敎ͼ其可接受一个long double参数Qƈ参数{换ؓ字符Ԍl果字符串应保留两位数Q例如,点?23.45678应该生成"123.45"q样?..
正文Q?/strong>在许多应用程序领域中Q都需要控制小数点后的数位,但是点数对此不能提供直接的支持。怎样对程序中的QҎ据进?整齐"地格式化呢?在此我们有一个迂回的ҎQ先把它们{换ؓ字符Ԍ格式化后以文本Ş式显C出来? 在日?/span>~程 ?-包括对话框、关p?a class="infotextkey" target="_blank">数据?/a> 、金融程序、SMSE序及一切处理数据文件的E序Q需要控制小数点后的数位的情况非常普遍Q本文中要讲解如何用简单的Ҏ来控制小CQ另外,q要揭开字符串及数据_ֺ的一点点秘密?br /> 问题的引?br /> 如有一个函敎ͼ其可接受一个long double参数Qƈ参数{换ؓ字符Ԍl果字符串应保留两位数Q例如,点?23.45678应该生成"123.45"q样的字W串。表面上看来q是一个意义不大的~程问题Q然而,如果真要在实际中z上用场Q函数应设计为具有一定弹性,以允许调用者指定小C数。另外,函数也应该能够处理各U异常情况,如像123.0?23q样的整数?br />在开始之前,先看一下编?优雅"C++代码 时的两句"真言"Q?br /> "真言"1Q无Z旉要格式化一个数|都应先{换ؓ一个字W串。这样可保证每位数刚好占据一个字W?br /> "真言"2Q在需要{换ؓ字符串时Q请使用<sstream>库?br /> 转换函数的接口非常简z:W一个参数是需被格式化的数|W二个参C表小数点后显C的数位,且应该具有一个默认|q回gؓ一个stringcdQ?br />
string do_fraction(long double value, int decplaces=3);
注意Q第二个参数代表的小CC包括了小数点Q因此,两位数需要默认gؓ3?br /> _ֺ问题 当然Q第一步是把long doubleD{换ؓ一个stringQ用标准C++?lt;sstream>直是手到擒来。然而,有一件事情必dh意,因ؓ某些原因Qstringstream对象默认_ֺ?Q而许多程序员错误地把"_ֺ"理解为小数的位数Q这是不正确的,_ֺ应指代全部位数。因而,数字1234.56?a class="infotextkey" target="_blank">安全地通过默认_ֺ6来表C,?2345.67会被截断?2345.6。这L话,如果你有一个非常大的数Q如1234567.8Q它的结果会静悄悄地转换为科学记数法Q?.23457e+06Q这昄不是我们惌的。ؓ避免q样的麻烦,在开始{换之前,应把默认_ֺ设ؓ最大?br />为得到long double能表C的最大位敎ͼ可?lt;limits>库:
string do_fraction(long double value, int decplaces=3) { int prec=numeric_limits<long double>::digits10; // 18 ostringstream out; out.precision(prec);//覆盖默认_ֺ out<<value; string str= out.str(); //从流中取出字W串 数值现在存储在str中,{待格式化?/td>
数点的位置 要进行格式化Q首先要定数点的位置Q如果小C多于decplacesQdo_fraction()会删除多余的?br /> 要定位小CQ可使用string::find()Q在STL法中用了一个常量来代表"数值未扑ֈ"Q在字符串中Q这个常量ؓstring::nposQ?br />
char DECIMAL_POINT='.'; // Ƨ洲用法?,' size_t n=str.find(DECIMAL_POINT); if ((n!=string::npos)//是否有小数点呢? { //查小数的位数 }
如果没有数点,函数直接q回字符Ԍ否则Q函数将l箋查小C是否多于decplaces。如果是Q小数部分将会被截断Q?br />
size_t n=str.find(DECIMAL_POINT); if ((n!=string::npos)//有小数点吗? &&(str.size()> n+decplaces)) //后面臛_q有decplaces位吗Q?br /> //在小数decplaces位之后写入nul str[n+decplaces]='';
最后一行覆盖了多余的小CQ它使用了常量来截断字符Ԍ要注意,string对象的数据可以包含nul字符Q而字W串的实际长度由size()的返回值决定。因此,你不能假定字W串已被正确地格式化Q换句话来说Q如果在str中原来ؓ"123.4567"Q在插入帔R之后Q它变成?123.457"Qؓ把str~减?123.45"Q一般可使用自交换的ҎQ?str.swap(string(str.c_str()) );//删除nul之后的多余字W?br /> 那它的原理是什么呢Q函数string::c_str()q回一个const char *代表此字W串对象Q而这个D用作一个时string对象的初始化|接着Q时对象又被用作str.swap()的参敎ͼswap()会把?123.45"赋给str。一些老一点的~译器不支持默认模板参数Q可能不会让swap()通过~译Q如果是q样的话Q用手工交换来代替Q?br />
string temp=str.c_str(); str=temp;
代码虽不是很"优美"Q但能达到目的就行。以下是do_fraction()的完整代码:
string do_fraction(long double value, int decplaces=3) { ostringstream out; int prec= numeric_limits<long double>::digits10; // 18 out.precision(prec);//覆盖默认_ֺ out<<value; string str= out.str(); //从流中取出字W串 size_t n=str.find(DECIMAL_POINT); if ((n!=string::npos) //有小数点吗? && (str.size()> n+decplaces)) //后面臛_q有decplaces位吗Q?br /> { str[n+decplaces]='';//覆盖W一个多余的?br /> } str.swap(string(str.c_str()));//删除nul之后的多余字W?br /> return str; }
如果不想通过传D回一个string对象Q还可增加一个参敎ͼ把str对象以引用传递:
void do_fraction(long double value, string & str, int decplaces=3);
从个人的角度来讲Q还是們于让~译器做q样的优化,另外Q用传D回,q可以让你以下面q种方式使用do_fraction()Q?br />
cout << funct(123456789.69999001) << 't' << funct(12.011)<<endl;
输出Q?br /> 123456789.69 12.01 -------------------------------------------------------------------------------------------------------------------------------------------------------------- 先简单理清一下思\Q?br />1 double以最大精度保存在ss?br />2 通过数Ҏ实际精度是否超q需要的_ֺ 3 如果过Q截?br />4 q回字符?br /> 补充一下,W?步应该加一个四舍五入功能。这个比较简单,按相应的位数+5后再截断好?img src ="http://www.shnenglu.com/zhaoyao91/aggbug/147740.html" width = "1" height = "1" /> ]]> cd转换操作W?/title> http://www.shnenglu.com/zhaoyao91/archive/2011/04/10/143897.html今晚打老虎 今晚打老虎 Sun, 10 Apr 2011 15:12:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/04/10/143897.html http://www.shnenglu.com/zhaoyao91/comments/143897.html http://www.shnenglu.com/zhaoyao91/archive/2011/04/10/143897.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/143897.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/143897.html operator typename() const { return ...//...是typenamecd?br>} 可以q样来理解。{换构造函数是Z一个其他类型{换到当前cdQ重载类型{换操作符则是Z当前类型{换到其他cd? 注意二义?br>比如Q?
class Test { Test(); Test( int n ); operator int (); int value; } ; int main() { Test myObject; Test yourObject; int intObject = 33 ; myObject = intObject; // 可以通过 myObject = yourObject + 3 ; // 不可以通过。编译器不知道该调用(int)yourObject转化为intq是调用Test( int )?转化为Test ?/span>
]]> VS2010实用记 http://www.shnenglu.com/zhaoyao91/archive/2011/04/06/143523.html今晚打老虎 今晚打老虎 Wed, 06 Apr 2011 06:50:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/04/06/143523.html http://www.shnenglu.com/zhaoyao91/comments/143523.html http://www.shnenglu.com/zhaoyao91/archive/2011/04/06/143523.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/143523.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/143523.html 1 快捷?br>Ctrl + k + c 注释选中代码 Ctrl + k + u 取消选中代码注释 Ctrl + k + f 格式化选中代码 Ctrl + ←or→ 向左或右Ud一个单?br>Ctrl + w 选择当前单词 (按住Shift可以在移动中选择) Ctrl + c/x 如果光标在这一行,则复?剪脓整行 Ctrl + + l 删除当前?br> Ctrl + m + o 所有大U折?br>Ctrl + m + l 所有大U展开 Ctrl + j 感知(写长代码时很好用)
Ctrl + tab 切换zd文g(q可以用Ctrl + F6Q效果有点不一?
]]>关于二重模板 记1 http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143441.html今晚打老虎 今晚打老虎 Tue, 05 Apr 2011 05:50:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143441.html http://www.shnenglu.com/zhaoyao91/comments/143441.html http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143441.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/143441.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/143441.html 记1是因个话题很可能q有其他记?br> 在模板下定义一个类Q类的方法包括重载的q算W往往可以处理q个cL板对于相同类型参数的特化的对象。但是有时候我们往往希望一个类模板的特化对象的Ҏq可以处理这个类模板其他特化的对象。一U办法是利用cȝ性质定义转换构造函敎ͼconvert constructor Q,但是我们可以使用模板得到一U更通用的方法,那就是在cL板中定义二重模板?br> 定义Ҏ很简单,下面的例子会展示。注意内层模板的参数应该与外层模板不一P而且定义的时候应该用两层template?br> 对于一般的函数和运符Q通常来说Q如果只定义一个二重模板的ҎQ它既可以处理不同类型的特化对象Q也可以处理相同cd的特化对象(即T和C是相同类型)。如果在外层模板中另外定义了一个普通的同名ҎQ以处理相同cd的特化对象)Q那么在处理相同cd的特化对象时Q则会调用这一套方法。这有点像对模板特化q行重蝲Q告诉编译器在特D情况,q里是特化类型相同,应该使用另外一套方法)?br>例如Q?br>如果?行和14~18行注释掉Q那么输出结果均Z?接受不同cd?br>
1 #include < iostream > 2 using namespace std; 3 4 template < typename T > 5 class A 6 { 7 public : 8 void function( const A < T > & ); 9 10 template < typename C > 11 void function( const A < C > & ); 12 }; 13 14 template < typename T > 15 void A < T > ::function( const A < T > & ) 16 { 17 cout << " 接受相同cd " << endl; 18 }19 20 template < typename T > 21 template < typename C > 22 void A < T > ::function( const A < C > & ) 23 { 24 cout << " 接受不相同类?/span>" << endl; 25 } 26 27 int main() 28 { 29 A< int > a; 30 A< int > b; 31 A< double > c; 32 33 a.function( b );34 a.function( c );35 }
但是对于复制操作W和拯构造函数来_情况有些不一栗因为编译器会ؓ没有定义的类提供默认Q以及拷贝构造函敎ͼҎ上面的分析,q个默认的东西相当于对二重模板中Ҏ情况的重载,所以如果只有一个二重模板,那么它将不能处理相同cd的类模板特化的对象。而这ӞE序会调用编译器提供的默认=以及拯构造函敎ͼ而这往往是我们不惌的(我们需要自己定制的Q以及拷贝构造函数啊Q。所以这Ӟ我们需要自己定制一套非二重模板的=或者拷贝构造函数来满需求?br> 例如Q?br>如果?行和14~18行注释掉Q那么输出结果只有一?Z同类型调??Q因为另外一句话调用了编译器提供的默?P所以ƈ没有M输出?br>
1 #include < iostream > 2 using namespace std; 3 4 template < typename T > 5 class B 6 { 7 public : 8 void operator = ( const B < T > & ); 9 10 template < typename C > 11 void operator = ( const B < C > & ); 12 }; 13 14 template < typename T > 15 void B < T > :: operator = ( const B < T > & ) 16 { 17 cout << " 为相同类型调??/span>" << endl; 18 } 19 20 template < typename T > 21 template < typename C > 22 void B < T > :: operator = ( const B < C > & ) 23 { 24 cout << " Z同类型调??/span>" << endl; 25 } 26 27 int main() 28 { 29 B< int > a; 30 B< int > b; 31 B< double > c; 32 33 a = b; 34 a = c; 35 }
]]> 模板的声明与实现的分L?/title> http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143423.html今晚打老虎 今晚打老虎 Mon, 04 Apr 2011 18:01:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143423.html http://www.shnenglu.com/zhaoyao91/comments/143423.html http://www.shnenglu.com/zhaoyao91/archive/2011/04/05/143423.html#Feedback 5 http://www.shnenglu.com/zhaoyao91/comments/commentRss/143423.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/143423.html c++标准定义了export来实现模板的声明与实现的分离。很遗憾Q现在很多编译器没有支持Q包括我现在使用的vs2010?br> 有一些其他的Ҏ。这里介l一U?br> 首先Q在.h文g中声明模板,q在最后包含相应的cpp文g。然后将实现写在cpp文g中。乍一看很别扭Q仔l一惛_实是合情合理的。不是要求声明和定义在一P且声明出现在定义之前么,q样写,.h文gq合要求了?br> cL板声?/p>
// This is MyClass.h #include < iostream > using namespace std; template < typename T > class MyClass { public : T function( const T & ); } ; #include " Myclass.cpp "
cL板定?br>
// This is MyClass.cpp template< typename T > T MyClass< T >::function( const T & ref ) { cout << " this is my class " << endl; return ref ; } int MyClass < int > ::function( const int & ref ) { cout << " this is int class " << endl; return ref ; }
q里cpp文g中顺便演CZ一下如何重载特定类型的模板特化?
]]> 多重l承、二义性、虚基类Q虚l承Q之我见 http://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143407.html今晚打老虎 今晚打老虎 Mon, 04 Apr 2011 09:24:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143407.html http://www.shnenglu.com/zhaoyao91/comments/143407.html http://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143407.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/143407.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/143407.html 书上只有一个虚基类的概念,卛_l承的时候加上关键字virtual。这里我们姑且把q种l承方式叫做虚ѝ现在先来说一下虚l承和一般承的区别?br> 要解释这一pd问题Q我们首先要搞清楚这一pd概念意味着什么。多重承不用赘q。现在先׃义性和虚承谈谈我的看法?br> 在一般的l承中(非虚l承Q,每一个派生类都保存了一份完整的基类副本。考虑以下l承Q?
class A { void print(); } ; class B : public A { void print(); } ; class C : public C { void print(); } ;
在这样一pdl承体系中,A包含一份print()QB包含了两份,而C则包含了三分prin()。这里d?份独立的print()函数。虽然在C中调用B::print()感觉和B中调用print()效果一P但他们确实是作ؓ两个副本存在。 而在虚承中Q考虑如下l承Q?br>
class A { void print(); } ; class B : virtual public A { void print(); } ; class C : virtual public C { void print(); } ;
Q只含有一份print()副本Q但是却可以通过A::print()调用A的print()函数。同理,C也只包含了一份print()副本。这里d只有3分print()副本。虚l承中基cȝ数据q没有变多一份给zc,而只是用权UM了,好像A有一栋楼Q虚l承lBQ名义上Q也拥有了这栋楼Q可以用,但是q没有真正ؓQ另外徏一栋一模一L楹{?br> 二义性:要解释二义性,最好先定义一个概念:名字间隔。笼l地表达Q一个名字的间隔是某个数据的名字从l承层次中首ơ出现到达最后派生类时中间隔了多相同的名字。间隔越,q个名字的优先高。当然直接在最l类里面声明的名字具有最高的优先U。比如考虑一开始的普通承:
class A { void print(); } ; class B : public A { void print(); } ; class C : public C { void print(); } ;
如果使用Q的对象Q那么A中的pirnt与C间隔最大,C中的print与C的间隔最短,所以如果直接调用C对象的print函数Q那么将调用C版本的print。如果C没有定义一个print函数Q那么B中的print函数与C间隔最,那么调用C对象的print函数Ӟ调用B版本的print函数?br> 有了q个概念Q现在来解释二义性:如果存在两个及其以上的名字距Ll派生类的距L短(长度一PQ那么,Ҏ刚才由名字间隔定义的优先U别Q在直接 调用q个zcd象的相应数据Ӟ便不知道该调用哪个版本了Q注意直接两个字Q因为可以通过二元::来分辨具体的版本以调用,所以即使名字存在二义性,如果未调用这些名字,~译器可能不会报错)。有两种情况Q到目前为止我看到的Q可能导致二义性:1、在cM声明了两个名字一L成员Q这是最p糕的情况,因ؓ如果q样做了Q没有办法I补,但这也是最好的情况Q因为编译器Ҏ不会让你q么做?、多l承的时候承了两个间隔一L名字Q通常难以对付的是q种情况?br> 关于上述W二U情况(多承)Q这些具有二义性的名字可能1、来自两个基cd自的声明Q?、也可能来自两个基类l承自更高层ơ的同一基类Q菱形承)Q?、也可能其中一个名字来自基cd明,另一个名字来自另一个基cd更高层次基类的ѝ无论如何,只要同时存在两个及其以上h如果存在两个及其以上的名字距Ll派生类的距L短(长度一PQ那么就存在二义性?br>?br>1、来自两个基cd自声?br>
class B1 { void print(); } ; class B2 : { void print(); } ; class C : public B1, public B2 { } ;
2、菱形?br>
class A { void print(); } ; class B1 : public A { } ; class B2 : public A { } ; class C : public B1, public B2 { } ;
3、其中一个名字来自基cd明,另一个名字来自另一个基cd更高层次基类的?br>
class A { void print(); } ; class B1 : public A { } ; class B2 : { void print(); } ; class C : public B1, public B2 { } ;
Q注意:虽然A版本的print是通过B1到达C的,但是A->B1->C的过E中QA版本的print与C之间q没有间隔其他的printQ这与B2版本的print一P所以他们具有相同的名字间隔Q因此具有二义性) 二义性的解决办法Q?br> 1、在最l派生类中定义一个相同名字的成员Q这栯个名字距Ll派生类最q,所以就会调用这个名字下的数据(通常教材里叫做这个名字把其他名字隐藏了)。这个名字(如果是函敎ͼ你可以自己定义新的方法,也可以通过二元::调用你已知的存在二义性的名字中的某一个(注意Q如果你选择的调用版本不是该zcȝ直接基类Q那么该如何调用呢?比如A->B->CQ那么从C的对象c调用A的print函数Qc.A::print()是否可行Q我在vs2010上,虽然报错但是~译通过且正常运行。如果各位有M见解或徏议,希望不吝赐教。) 2、用虚l承Q针对菱形承等Q:回想一下虚l承和普通承,通过虚承的Ҏ可以消除重复副本 带来的二义性问题。比如在某一l承层次上,q个某两个名字具有二义性,然而顺着l承层次向上分析Q却发现q两个名字其实是同一个东西的两个副本Q这个时候如果用虚l承Q那么就使得q两个副本变Z个副本(准确地说Q两个副本都没有了,因ؓ只存在他们公共基cȝ那䆾数据Q虚基类得到的不q是使用权)?br> 写在后面Q?br> 注意虚函数和虚承的区别Q虚函数q没有减Q何数据的存在Q仅仅相当于在基cL针层面上建立了一U?#8220;调用最靠近对象cd的函?#8221;的机制。然而虚l承则是一U类的承方式,卻I只创建派生类Ҏ部分的数据,l承的数据按需从基cȝ取。所以虽然他们都是用virtual关键字,但似乎意思上联系不大?br> 另外Q是用虚l承能够解决的问题相当有限。而且虚扉K临一个开销问题Q虽然从l承层面上看Q这是一个消除二义性的好方法,而且g对编E没有什么副作用。这个道理与虚函数带来的好处与开销权衡问题差不多。一些书希望把这个问题留个程序员自己权衡Q一些书则徏议一律用虚函数。不q应该指出,现在g讑֤能力的提升速度g在不断削弱我们对开销问题的顾忌(只要法上不存在问题Q,所以即使你不打从现在开始就全盘使用虚函C及虚l承Q而且对于一般的程序,即不断加上q些关键字也会人厌烦吧Q况且有些类g一辈子也不会成为基cdQ)Q但是请臛_保持q样一个念_多一U打,多一条\嘛?
]]> cd例化?默认构造函数调?记 http://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143377.html今晚打老虎 今晚打老虎 Sun, 03 Apr 2011 19:04:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143377.html http://www.shnenglu.com/zhaoyao91/comments/143377.html http://www.shnenglu.com/zhaoyao91/archive/2011/04/04/143377.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/143377.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/143377.html
class A { public : A( int a = 10 ) { c = a; } int c; } ; int main() { A t1; A t2(); A * p1 = new A; A * p2 = new A(); }
四种实例化类的方法(调用默认构造函敎ͼ。其中第二种是错误的Q编译器认ؓ是这样一个函数的声明?
]]> 关于cL板的友元函数 http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143148.html今晚打老虎 今晚打老虎 Thu, 31 Mar 2011 11:15:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143148.html http://www.shnenglu.com/zhaoyao91/comments/143148.html http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143148.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/143148.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/143148.html 对类建立友元函数很容易。但是迁Ud模板上却Ҏ出现让h怸着头脑的连接错误?br> 层次不够Q不做分析,单纯介绍两种为类模板定义友元函数的方?br> Q 闭?/p>
template < typename T > class MyClass { friend void function( MyClass < T > & arg ) { } };
要点Q友元函数定义在模板体内?br> Q 开攑֞
template < typename T > class MyClass { template < typename C > friend void function( MyClass < C > & arg ); } ; template < typename C > void function( MyClass < C > & arg ) { }
要点Q模板体内要另徏模板?nbsp; 3 告诉~译器声明的设个是模?br>
#include < iostream > using namespace std; template < typename T > class A { friend ostream & operator << < T > ( ostream & , const A < T > & ); } ; template < typename T > ostream & operator << ( ostream & output, const A < T > & a ) { output << " 重蝲成功 " << endl; return output; } int main() { A < int > a; cout << a; }
要点Q显C地在重载的q算W或者函数后面加上模板声?lt; T >Q?告诉~译器友元函数是一个类型一致的模板? Q?br> 如果希望使用函数与模板特化的cd相对应,则用方?Q模板显C声明) 如果希望使用函数与模板特化的cd相独立,则用方?Q二重模板) 短的内联函数使用Ҏ1
]]> 关于q算W重载的一些笔?/title> http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143147.html今晚打老虎 今晚打老虎 Thu, 31 Mar 2011 11:07:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143147.html http://www.shnenglu.com/zhaoyao91/comments/143147.html http://www.shnenglu.com/zhaoyao91/archive/2011/03/31/143147.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/143147.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/143147.html 2.只需要制定一套该cM间的q算W重载和一套该cM其他cd的{换构造函数即可实现该cM其他cd之间的运符重蝲?br>3.+ - * /q回副本 a++ q回延迟副本 关系q算W返回bool 其他D符Q? += ++a{)q回引用Q特别注意:不是帔R引用。发现编译器支持Qa = b Q? c q种语法。说明带=q算W返回ؓ引用。且逻辑上也说得通) 4. != { return !( a == b ); } 5.+ - * /及关p运符不改变对象的|应该加const 6.对于+{双向操作符Q应该定义ؓ全局函数以实C换律Q考虑到利?=来简化操作ƈ创徏副本Q可以一个参数接受副本,另一个参数接受常量引用) 7.利用<?=_实现其他关系q算W?
]]> 最短的鹦鹉学舌E序 http://www.shnenglu.com/zhaoyao91/archive/2011/03/27/142778.html今晚打老虎 今晚打老虎 Sat, 26 Mar 2011 18:21:00 GMT http://www.shnenglu.com/zhaoyao91/archive/2011/03/27/142778.html http://www.shnenglu.com/zhaoyao91/comments/142778.html http://www.shnenglu.com/zhaoyao91/archive/2011/03/27/142778.html#Feedback 0 http://www.shnenglu.com/zhaoyao91/comments/commentRss/142778.html http://www.shnenglu.com/zhaoyao91/services/trackbacks/142778.html 自我感觉是最短的写法了,由此可以引出重要的思想Q直接流操作Q以及流函数rdbuf的相兛_宏V请自行查阅?br>
#include < iostream > using namespace std; int main() { cout << cin.rdbuf(); }
]]>
þùɫAVѹۿ |
ŷþۺ㽶 |
պƷþһ |
re99þþƷ99 |
þҹ³˿Ƭϼ
|
ӰԺ˾þ |
þþþŮ˾ƷëƬ |
þþþƷһ
|
ݺɫþۺ |
þþƷһ |
99Ʒþþþþþ |
þùɫavѿ |
Ůþþùһ
|
Ƶþ |
þþƷAVþþ |
þAVһ |
þþƷһAV |
þҹ³Ƭ |
þùƷ99þþþþ |
ŷƷþѿ |
þþĻձ |
þ߳ˮ |
ɫɫݺɫۺϾþ
|
þۺŷ |
ҹƷþӰԺ |
ݹƷþþþþ |
Ʒ99þþþ91gav |
þӰۺ |
MM131Ůþ |
þþƷA㽶 |
þþƷAVɫ |
99þùۺ |
þþ91뾫ƷHD
|
þùۿ |
ŷ龫Ʒþþþþþ
|
ٸþþþþ |
ƷþƷ |
þһح
|
պAvĻþþ |
þþþAVվ |
þ97Ʒþþþþþò |