⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 effective c++ 2e item41.htm

📁 Effective-c++.国外很经典的一本关于c++编程的电子书。
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0047)http://www.csdn.net/develop/article/9/9364.shtm -->
<HTML><HEAD><TITLE>Effective C++ 2e Item41</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=Expires content=0><LINK 
href="Effective C++ 2e Item41.files/news.css" rel=stylesheet>
<STYLE type=text/css>.fst {
	BORDER-RIGHT: #000000 1px solid; PADDING-RIGHT: 15px; PADDING-LEFT: 15px; BACKGROUND: #eeeecc; PADDING-BOTTOM: 0px; BORDER-LEFT: #000000 1px solid; WIDTH: 770px; PADDING-TOP: 0px
}
.fstdiv3 IMG {
	BORDER-RIGHT: #eeeecc 8px solid; BORDER-TOP: #eeeecc 6px solid; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px
}
</STYLE>

<META content="MSHTML 6.00.2462.0" name=GENERATOR></HEAD>
<BODY bottomMargin=0 aLink=#990000 bgColor=#ffffff leftMargin=0 topMargin=0 
rightMargin=0 marginheight="0" marginwidth="0">
<SCRIPT language=javascript1.2>
<!--
	var currentpos,timer; 
	function initialize() 
	{ 
	timer=setInterval('scrollwindow()',10);
	} 
	function sc(){
	clearInterval(timer);	
	}
	function scrollwindow() 
	{ 
	currentpos=document.body.scrollTop; 
	window.scroll(0,++currentpos); 
	if (currentpos != document.body.scrollTop) 
	sc();
	} 
	document.onmousedown=sc
	document.ondblclick=initialize
//-->
</SCRIPT>

<CENTER><LINK href="news.css" rel=stylesheet>
<TABLE cellSpacing=0 cellPadding=0 width=770 border=0>
  <TBODY>
  <TR vAlign=bottom>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/1.gif" 
      width=14></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/">CSDN主页</A></FONT></DIV></TD>
    <TD width=185 bgColor=#001880 height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/2.gif" 
      width=70></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/y1.gif" 
      width=3></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/news/">新闻聚焦</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=center><FONT color=#ff6633><A 
      href="http://www.csdn.net/cnshare/">共享软件</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=14></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/buy/">俱乐部</A><IMG 
      src="http://www.csdn.net/images/buy.gif"></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=left><A href="http://www.csdn.net/develop/"><FONT 
      color=red>开发文档</FONT></A></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://expert.csdn.net/">专家门诊</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/job/">招聘求职</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=left><FONT color=#ff6633><A 
      href="http://www.csdn.net/linux/">Linux园地</A></FONT></DIV></TD>
    <TD height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/jiao.gif" 
      width=15></DIV></TD>
    <TD background="Effective C++ 2e Item41.files/di.gif" height=22>
      <DIV align=left><A href="http://www.csdn.net/magazine/">程序员杂志</A></DIV></TD>
    <TD width=11 height=22>
      <DIV align=left><IMG height=22 src="http://www.csdn.net/images/j1.gif" 
      width=11></DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=770 border=0>
  <TBODY>
  <TR>
    <TD width=2 bgColor=#001880 height=5></TD>
    <TD width=768 height=5></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=770 border=0>
  <TBODY>
  <TR>
    <TD width=2 bgColor=#001880></TD>
    <TD width=158><IMG src="http://www.csdn.net/images/csdn_logo.gif" 
    border=0></TD>
    <TD align=middle width=470>
      <OBJECT id=Movie1 
      codeBase=http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0 
      height=60 width=468 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="movie" VALUE="http://www.csdn.net/images/ad/magazine6_1.swf"><PARAM NAME="quality" VALUE="high">
      <EMBED src='http://www.csdn.net/images/ad/magazine6_1.swf' quality=high 
      WIDTH=468 HEIGHT=60 TYPE='application/x-shockwave-flash' 
      PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'>
      </EMBED></OBJECT><IMG height=0 
      src="http://www.csdn.net/count/pageview.asp?name=cnshare" width=0 
      border=0> </TD>
    <TD align=right width=140>
      <SCRIPT>document.write("<img src=http://www.csdn.net/count/pageview.asp?name=develop border=0 width=0 height=0>");</SCRIPT>
      <A href="http://www.csdn.net/dev/"><IMG height=60 
      src="http://www.csdn.net/develop/images/kfzxt3.gif" width=120 
      border=0></A> </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=770 border=0>
  <TBODY>
  <TR>
    <TD width=2 bgColor=#001880></TD>
    <FORM action=http://www.csdn.net/member/logon.asp method=post target=_blank>
    <TD vAlign=bottom width=340 bgColor=#e0dedf> 昵称:<INPUT class=from1 size=10 
      name=name> 密码:<INPUT class=from1 type=password size=10 name=pass> <SELECT 
      size=1 name=type> <OPTION value=1>我的论坛</OPTION> <OPTION 
        value=2>我的软件</OPTION> <OPTION value=3>我的订单</OPTION> <OPTION value=4 
        selected>我的文档</OPTION> <OPTION value=5>我的简历</OPTION></SELECT></TD>
    <TD vAlign=bottom width=45 bgColor=#e0dedf><INPUT type=image height=17 
      width=44 src="http://www.csdn.net/images/denglu.gif"> </TD>
    <TD vAlign=bottom width=45 bgColor=#e0dedf><A 
      href="http://www.csdn.net/expert/zc.asp" target=_parent><IMG 
      src="http://www.csdn.net/images/zhuce.gif" border=0></A> </TD></FORM>
    <FORM action=http://www.csdn.net/find.asp method=post target=_blank>
    <TD vAlign=bottom align=right width=293 bgColor=#e0dedf><INPUT class=from1 
      name=search> <SELECT size=1 name=type> <OPTION value=1>新闻</OPTION> 
        <OPTION value=2>软件</OPTION> <OPTION value=3>商品</OPTION> <OPTION value=4 
        selected>文档</OPTION> <OPTION value=5>论坛</OPTION></SELECT></TD>
    <TD vAlign=bottom width=45 bgColor=#e0dedf><INPUT type=image height=17 
      width=44 src="http://www.csdn.net/images/sousuo.gif"> 
</TD></FORM></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 width=770 align=center bgColor=#cccc99 
border=0>
  <TBODY>
  <TR>
    <TH align=left>Effective C++ 2e Item41 &nbsp;&nbsp;&nbsp; 
  </TH></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=1 width=770 align=center bgColor=#eeeecc 
border=1>
  <TBODY>
  <TR>
    <TD align=left width=300><B>关键字:</B><BR>Effective C++ </TD>
    <TD align=middle width=120><B>贴文时间</B><BR>2001-8-1 20:11:05 </TD>
    <TD align=middle width=80><B>文章类型: </B><BR>翻译 </TD>
    <TD align=middle width=100><B>给贴子投票 </B><BR><A 
      href="http://www.csdn.net/develop/addscore.asp?id=9364">投票</A> </TD></TR>
  <TR>
    <TD>&nbsp; lostmouse &nbsp;&nbsp; 翻译 </TD>
    <TD vAlign=top colSpan=3><B>出处: </B><A 
      href="http://www.csdn.net/develop/article/9/Effective%20C++%202e%20e-book">Effective 
      C++ 2e e-book </A></TD></TR>
  <TR>
    <TD bgColor=#cccc99 colSpan=5>&nbsp;</TD></TR></TD></TR></TBODY></TABLE>
<DIV align=center>
<DIV class=fst align=left>
<DIV class=fstdiv3 id=print2><BR><BR>
<P>条款41: 区分继承和模板</P>
<P>考虑下面两个设计问题:</P>
<P>· 
作为一位立志献身计算机科学的学生,你想设计一个类来表示对象的堆栈。这将需要多个不同的类,因为每个堆栈中的元素必须是同类的,即,它里面包含的必须只是同种类型的对象。例如,会有一个类来表示int的堆栈,第二个类来表示string的堆栈,第三个类来表示string的堆栈的堆栈,等等。你也许对设计一个最小的类接口(参见条款18)很感兴趣,所以会将对堆栈的操作限制在:创建堆栈,销毁堆栈,将对象压入堆栈,将对象弹出堆栈,以及检查堆栈是否为空。设计中,你不会借助标准库中的类(包括stack 
---- 参见条款49),因为你渴望亲手写这些代码。重用(Reuse)是一件美事,但当你的目标是探究事情的工作原理时,那就只有挖地三尺了。</P>
<P>· 
作为一位爱猫的宠物迷,你想设计一个类来表示猫。这也将需要多个不同的类,因为每个品种的猫都会有点不同。和所有对象一样,猫可以被创建和销毁,但,正如所有猫迷所知道的,猫所做的其它事不外乎吃和睡。然而,每一种猫吃和睡都有各自惹人喜爱的方式。</P>
<P>这两个问题的说明听起来很相似,但却导致完全不同的两种设计。为什么?</P>
<P>答案涉及到"类的行为" 和 
"类所操作的对象的类型"之间的关系。对于堆栈和猫来说,要处理的都是各种不同的类型(堆栈包含类型为T的对象,猫则为品种T),但你必须问自己这样一个问题:类型T影响类的行为吗?如果T不影响行为,你可以使用模板。如果T影响行为,你就需要虚函数,从而要使用继承。</P>
<P>下面的代码通过定义一个链表来实现Stack类,假设堆栈的对象类型为T:</P>
<P>class Stack {<BR>public:<BR>&nbsp; Stack();<BR>&nbsp; ~Stack();</P>
<P>&nbsp; void push(const T&amp; object);<BR>&nbsp; T pop();</P>
<P>&nbsp; bool empty() 
const;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// 堆栈为空?</P>
<P>private:<BR>&nbsp; struct StackNode 
{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -