﻿<?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>IT博客-菜鸟天堂-随笔分类-程序设计语言</title><link>http://www.cnitblog.com/tonywearme/category/3726.html</link><description>海纳百川有容乃大，壁立千仞无欲则刚</description><language>zh-cn</language><lastBuildDate>Sun, 02 Oct 2011 20:09:40 GMT</lastBuildDate><pubDate>Sun, 02 Oct 2011 20:09:40 GMT</pubDate><ttl>60</ttl><item><title>证明: C++中的友元运算符函数operator@不能属于任何类</title><link>http://www.cnitblog.com/tonywearme/archive/2006/09/08/16551.html</link><dc:creator>樱木</dc:creator><author>樱木</author><pubDate>Fri, 08 Sep 2006 13:37:00 GMT</pubDate><guid>http://www.cnitblog.com/tonywearme/archive/2006/09/08/16551.html</guid><wfw:comment>http://www.cnitblog.com/tonywearme/comments/16551.html</wfw:comment><comments>http://www.cnitblog.com/tonywearme/archive/2006/09/08/16551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tonywearme/comments/commentRss/16551.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tonywearme/services/trackbacks/16551.html</trackback:ping><description><![CDATA[证明: C++中的友元运算符函数operator@不能属于任何类, 也就是说该友元不能是友元成员.<br /><br />proof:<br /><br /><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">友元运算符函数只能是一般的类外部友元函数</span><span lang="EN-US">, </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而不能是属于某个类的友元成员函数</span><span lang="EN-US">. </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果</span><span lang="EN-US">operator@</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span><span lang="EN-US">A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的成员函数</span><span lang="EN-US">, </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同时又是</span><span lang="EN-US">B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的友元</span><span lang="EN-US">, </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设</span><span lang="EN-US">@</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span><span lang="EN-US">m</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目运算符</span><span lang="EN-US">, </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则</span><span lang="EN-US">A</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类要求</span><span lang="EN-US">operator@</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只带有</span><span lang="EN-US">n-1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个参数</span><span lang="EN-US">. </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但同时作为</span><span lang="EN-US">B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的友元</span><span lang="EN-US">, B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类要求</span><span lang="EN-US">operator@</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">带有</span><span lang="EN-US">n</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个参数</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因为没有</span><span lang="EN-US">B</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的</span><span lang="EN-US">this</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指针</span><span lang="EN-US">), </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由此矛盾</span><span lang="EN-US">.<br /><br /><br />哇哈哈, 竟然证明C++的语言特性, 这倒是第一次, 值得留念!</span></p><img src ="http://www.cnitblog.com/tonywearme/aggbug/16551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tonywearme/" target="_blank">樱木</a> 2006-09-08 21:37 <a href="http://www.cnitblog.com/tonywearme/archive/2006/09/08/16551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC里面模板类定义的位置</title><link>http://www.cnitblog.com/tonywearme/archive/2006/09/04/16364.html</link><dc:creator>樱木</dc:creator><author>樱木</author><pubDate>Mon, 04 Sep 2006 14:43:00 GMT</pubDate><guid>http://www.cnitblog.com/tonywearme/archive/2006/09/04/16364.html</guid><wfw:comment>http://www.cnitblog.com/tonywearme/comments/16364.html</wfw:comment><comments>http://www.cnitblog.com/tonywearme/archive/2006/09/04/16364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tonywearme/comments/commentRss/16364.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tonywearme/services/trackbacks/16364.html</trackback:ping><description><![CDATA[今天用类模板写了一个可扩展空间的栈. compile没问题, 一run就发现报链接错误, 说几个类的成员函数都找不到:<br />error LNK2001: unresolved external symbol ****. 检查了一下, 发现和以前写的没什么两样啊, 后来才发现原来所有的函数定义及实现都是放在一个.h中, 现在遵循良好的设计规范, 把类定义放在.h中, 类的实现放在.cpp中反而出错了?? 晕!<br /><br />网上查了一点资料, 发现VC6好像是不支持分开写的, (不是模板当然可以!), 无论是类模板还是函数模板, 都必须写在一个.h文件中. 有人可能会说那么这个包含方法实现的头文件如果多个其他文件include它, 那不是就有问题了么? 要不要#pragma once呀, 这里明确告诉你, 不用的. &lt;&lt;Thinking in C++&gt;&gt;里面说, 因为类模板的.h文件和普通类的.h文件在编译器处理的时候好像是有区别的. 原因自己去看书吧, 不过书里说得不多,我也忘记啦.<img src ="http://www.cnitblog.com/tonywearme/aggbug/16364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tonywearme/" target="_blank">樱木</a> 2006-09-04 22:43 <a href="http://www.cnitblog.com/tonywearme/archive/2006/09/04/16364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>