﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-The Programming world of Alex-随笔分类-C++程序设计</title><link>http://www.cppblog.com/qudeqing0204lyf/category/10132.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 08 Jul 2010 15:44:41 GMT</lastBuildDate><pubDate>Thu, 08 Jul 2010 15:44:41 GMT</pubDate><ttl>60</ttl><item><title>Xtreme实现MFC视图分割</title><link>http://www.cppblog.com/qudeqing0204lyf/archive/2010/07/07/119621.html</link><dc:creator>Alex@VCC</dc:creator><author>Alex@VCC</author><pubDate>Wed, 07 Jul 2010 09:46:00 GMT</pubDate><guid>http://www.cppblog.com/qudeqing0204lyf/archive/2010/07/07/119621.html</guid><wfw:comment>http://www.cppblog.com/qudeqing0204lyf/comments/119621.html</wfw:comment><comments>http://www.cppblog.com/qudeqing0204lyf/archive/2010/07/07/119621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qudeqing0204lyf/comments/commentRss/119621.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qudeqing0204lyf/services/trackbacks/119621.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/qudeqing0204lyf/archive/2010/07/07/119621.html'>阅读全文</a><img src ="http://www.cppblog.com/qudeqing0204lyf/aggbug/119621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qudeqing0204lyf/" target="_blank">Alex@VCC</a> 2010-07-07 17:46 <a href="http://www.cppblog.com/qudeqing0204lyf/archive/2010/07/07/119621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++模板内容拾遗</title><link>http://www.cppblog.com/qudeqing0204lyf/archive/2009/03/11/76263.html</link><dc:creator>Alex@VCC</dc:creator><author>Alex@VCC</author><pubDate>Wed, 11 Mar 2009 11:56:00 GMT</pubDate><guid>http://www.cppblog.com/qudeqing0204lyf/archive/2009/03/11/76263.html</guid><wfw:comment>http://www.cppblog.com/qudeqing0204lyf/comments/76263.html</wfw:comment><comments>http://www.cppblog.com/qudeqing0204lyf/archive/2009/03/11/76263.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/qudeqing0204lyf/comments/commentRss/76263.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qudeqing0204lyf/services/trackbacks/76263.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: 微软雅黑">上C++课程的时候老师总是鼓吹模板如何重要，但是真正上课时候却将该部分跳过。平时做项目写程序虽然天天接触STL，但说到如何实现模板真的是道不出其一二。现将这几天看C++Primer中的一些重要概念提取出来，以备不时之需。<br>1，模板的用处。<br>模板其实也是多态思想的一种体现，不过不是C++那个运行时多态，而是编译时多态。那么用在什么地方呢？个人感觉用的最多的是在数据结构中，一些经典的数据结构（Queue，Stack）用模板类实现确实事半功倍。至于其他地方嘛。。。也许是自己的功力不够，几乎就没有用过（设计模式不也是一样的道理嘛，囧）<br>2，模板定义<br>模板函数定义：<br>template&lt;typename T&gt;<br>int compare(const T &amp;v1,const T &amp;v2);<br>内联函数：<br>inline template&lt;typename T&gt; int compare(const T &amp;v1,const T &amp;v2);<br></p>
<span style="FONT-FAMILY: 微软雅黑">模板类定义：<br>template&lt;class Type&gt; class Queue<br>{<br>&nbsp;public:<br>&nbsp;&nbsp;&nbsp;&nbsp;Queue();<br>&nbsp;&nbsp;&nbsp;Type T&amp; front();<br>//......<br>}<br>3，模板类实例化<br>Queue&lt;int&gt; qi;<br>其实这个不就是和STL一模一样嘛？确实是的，STL不就是帮我们这些经典的数据结构一一实现了嘛？<br><br>4,友元的在模板类的使用<br>friend class Queue&lt;Type&gt;;<br>这样就将Queue这个模板类设为了友元，之前必须要有Queue&lt;Type&gt;的声明，如template&lt;class Type&gt; class Queue;<br><br>5,static在模板类中<br>一个模板类会有多个static实例成员，但每种类型的模板类只有一个static成员！<br>比如说Queue&lt;int&gt;有一个static成员，Queue&lt;string&gt;也有一个static成员<br><br>讨论：<br>如果你讨厌链接错误，那么你一定觉得模板这个东西是让人讨厌的，起码编译器是很讨厌模板的，要知道在实例化时才会确定模板中T的类型，再根据他生成相应的代码是件很麻烦的事情，模板类在这个问题上显得尤其麻烦。<br>一般写类都是将定义和声明放在两个文件中的，这样清晰明了，但是在模板类中绝对不可以！编译器会找不到你定义的那些方法！<br><br>所以说，<span style="COLOR: red">写模板类的话就请写在一个文件中吧</span>，MS到现在还把export留作未来使用的关键字在，我们暂时就不要指望这个了吧！</span> 
<img src ="http://www.cppblog.com/qudeqing0204lyf/aggbug/76263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qudeqing0204lyf/" target="_blank">Alex@VCC</a> 2009-03-11 19:56 <a href="http://www.cppblog.com/qudeqing0204lyf/archive/2009/03/11/76263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于友元类的一些随笔</title><link>http://www.cppblog.com/qudeqing0204lyf/archive/2009/03/11/76235.html</link><dc:creator>Alex@VCC</dc:creator><author>Alex@VCC</author><pubDate>Wed, 11 Mar 2009 08:15:00 GMT</pubDate><guid>http://www.cppblog.com/qudeqing0204lyf/archive/2009/03/11/76235.html</guid><wfw:comment>http://www.cppblog.com/qudeqing0204lyf/comments/76235.html</wfw:comment><comments>http://www.cppblog.com/qudeqing0204lyf/archive/2009/03/11/76235.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/qudeqing0204lyf/comments/commentRss/76235.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qudeqing0204lyf/services/trackbacks/76235.html</trackback:ping><description><![CDATA[<p><span style="FONT-FAMILY: 微软雅黑">看模板类的时候发现有些地方使用到了友元，上课学的记不得了，赶紧温习下。。。<br><br>友元概念就不罗嗦了，使用也简单，就两种形式：<br>1.友元函数：friend ret-type classname::funname(....);<br>2.友元类：friend class classname;<br>唯一要注意的就是不管是友元函数还是友元类，定义友元关系前必须先声明<br><br>友元类其实还是有些故事要说的，一旦类继承起来友元关系还是有些小复杂的，下面简单说明：<br><br><img style="WIDTH: 395px; HEIGHT: 250px" height=250 src="http://www.cppblog.com/images/cppblog_com/qudeqing0204lyf/asdf.jpg" width=395 border=0><br><br>C中声明A是其友元类，那么最基本的就是A可以使用C中的private方法或者对象。<br>图中可见，A是B的基类，C是D的基类。ABCD中就有如下关系：<br>1.B新增的方法不能访问Ｃ的私有成员<br>2.B从Ａ继承而来的方法可以访问Ｃ的私有成员<br>3.A只能访问D中从C中继承而来的私有成员，D中新增的私有成员不能访问！<br><br>总结起来就是<span style="COLOR: red">友元关系不可以继承，但对已有的方法来说访问权限不改变。如果改写基类的方法则访问权限改变<br></span><br>PS ：　要特别谢谢有朋友留言纠正了我的错误，这次将测试用代码一并贴出<br><br>class C<br>{<br>&nbsp;&nbsp;&nbsp; friend class A;<br>private :<br>&nbsp;&nbsp;&nbsp; int numC;<br>};</span></p>
<p><span style="FONT-FAMILY: 微软雅黑">class D : public C<br>{<br>private: <br>&nbsp;&nbsp;&nbsp; int numD;<br>};</span></p>
<p><span style="FONT-FAMILY: 微软雅黑">class A<br>{<br>public:<br>//A是Ｃ的友元，可以访问Ｃ的私有成员<br>&nbsp;&nbsp;&nbsp; void getFromC()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C c;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.numC = 100;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"getFromC in A : numC = "&lt;&lt;c.numC&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; };<br>//Ａ不是Ｄ的友元，不能访问Ｄ中新增的私有成员，但可以访问Ｄ从Ｃ中继承而来的私有成员<br>&nbsp;&nbsp;&nbsp; void getFromD()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D d;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d.numC = 23;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"getFromD in A : numC &nbsp;= "&lt;&lt;d.numC&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //d.numD = 24;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //cout&lt;&lt;"getFromD in A : numD&nbsp;&nbsp;= "&lt;&lt;d.numD&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; }<br>};</span></p>
<p><span style="FONT-FAMILY: 微软雅黑">class B :public A<br>{<br>public:<br>//<span style="COLOR: red">友元关系不能继承</span>，新增的方法不能访问Ｃ的私有成员<br>//&nbsp;&nbsp;&nbsp; int getNumB()<br>//&nbsp;&nbsp;&nbsp; {<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C c;<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.numC = 100;<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return c.numC;<br>//&nbsp;&nbsp;&nbsp; }<br><br>//<span style="COLOR: red">改写方法后对Ｃ访问权限改变</span>，不能访问Ｃ的私有成员<br>//&nbsp;&nbsp;&nbsp; void getFromC()<br>//&nbsp;&nbsp; {<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C c;<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.numC = 100;<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"getFromC in B : numC = "&lt;&lt;c.numC&lt;&lt;endl;<br>//&nbsp;&nbsp; }</span></p>
<p><span style="FONT-FAMILY: 微软雅黑">};<br><br>int _tmain(int argc, _TCHAR* argv[])<br>{<br>&nbsp;&nbsp;&nbsp; A a;<br>&nbsp;&nbsp;&nbsp; a.getFromC();//输出——getFromC in A : numC = 100<br>&nbsp;&nbsp;&nbsp; a.getFromD();//输出——getFromD in A : numC = 23<br>&nbsp;&nbsp;&nbsp; B b;<br>&nbsp;&nbsp;&nbsp; b.getFromC();//输出——getFromC in A : numC&nbsp; = 100<br>&nbsp;&nbsp;&nbsp;&nbsp;//调用的还是A::getFromC&nbsp;&nbsp;&nbsp;<br>&nbsp;return 0;<br>}</p>
</span>
<img src ="http://www.cppblog.com/qudeqing0204lyf/aggbug/76235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qudeqing0204lyf/" target="_blank">Alex@VCC</a> 2009-03-11 16:15 <a href="http://www.cppblog.com/qudeqing0204lyf/archive/2009/03/11/76235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>