亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ch15.htm

?? good book for learning c++ standard language
?? HTM
?? 第 1 頁 / 共 5 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>

<HEAD>
<!-- This document was created from RTF source by rtftohtml version 3.0.1 -->

	<META NAME="GENERATOR" Content="Symantec Visual Page 1.0">
	<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-1">
	<TITLE>Teach Yourself C++ in 21 Days</TITLE>
</HEAD>

<BODY TEXT="#000000" BGCOLOR="#FFFFFF">

<H1 ALIGN="CENTER"><A HREF="ch14rv2.htm" tppabs="http://petunia.atomki.hu/pio/Manuals/english/0-672/0-672-31070-8/htm/ch14rv2.htm"><IMG SRC="../buttons/BLANPREV.GIF" tppabs="http://petunia.atomki.hu/pio/Manuals/english/0-672/0-672-31070-8/buttons/BLANPREV.GIF"
WIDTH="37" HEIGHT="37" ALIGN="BOTTOM" BORDER="0"></A><A HREF="javascript:if(confirm('http://www.mcp.com/sams  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://www.mcp.com/sams'" tppabs="http://www.mcp.com/sams"><IMG
SRC="../buttons/BLANHOME.GIF" tppabs="http://petunia.atomki.hu/pio/Manuals/english/0-672/0-672-31070-8/buttons/BLANHOME.GIF" WIDTH="37" HEIGHT="37" ALIGN="BOTTOM"
BORDER="0"></A><A HREF="../index.htm" tppabs="http://petunia.atomki.hu/pio/Manuals/english/0-672/0-672-31070-8/index.htm"><IMG SRC="../buttons/BLANTOC.GIF" tppabs="http://petunia.atomki.hu/pio/Manuals/english/0-672/0-672-31070-8/buttons/BLANTOC.GIF"
WIDTH="37" HEIGHT="37" ALIGN="BOTTOM" BORDER="0"></A><A HREF="ch16.htm" tppabs="http://petunia.atomki.hu/pio/Manuals/english/0-672/0-672-31070-8/htm/ch16.htm"><IMG SRC="../buttons/BLANNEXT.GIF" tppabs="http://petunia.atomki.hu/pio/Manuals/english/0-672/0-672-31070-8/buttons/BLANNEXT.GIF"
WIDTH="37" HEIGHT="37" ALIGN="BOTTOM" BORDER="0"></A></H1>
<H1></H1>

<UL>
	<LI><A HREF="#Heading1">Day 15</A>
	<UL>
		<LI><A HREF="#Heading2">Advanced Inheritance</A>
		<UL>
			<LI><A HREF="#Heading3">Containment</A>
			<LI><A HREF="#Heading4">Listing 15.1. The String class</A><A HREF="#Heading5">.</A>
			<LI><A HREF="#Heading6">Listing 15.2. The Employee class and driver program</A><A
			HREF="#Heading7">.</A>
			<UL>
				<LI><A HREF="#Heading8">Accessing Members of the Contained Class</A>
				<LI><A HREF="#Heading9">Filtering Access to Contained Members</A>
				<LI><A HREF="#Heading10">Cost of Containment</A>
			</UL>
			<LI><A HREF="#Heading11">Listing 15.3. Contained class constructors</A><A HREF="#Heading12">.</A>
			<UL>
				<LI><A HREF="#Heading13">Copying by Value</A>
			</UL>
			<LI><A HREF="#Heading14">Listing 15.4. Passing by value</A><A HREF="#Heading15">.</A>
			<LI><A HREF="#Heading16">Implementation in Terms of Inheritance/Containment Versus
			Delegation</A>
			<UL>
				<LI><A HREF="#Heading17">Delegation</A>
			</UL>
			<LI><A HREF="#Heading18">Listing 15.5. Delegating to a contained LinkedList</A><A
			HREF="#Heading19">.</A>
			<LI><A HREF="#Heading20">Private Inheritance</A>
			<LI><A HREF="#Heading21">Listing 15.6. Private</A>
			<LI><A HREF="#Heading22">inheritance</A><A HREF="#Heading23">.</A>
			<LI><A HREF="#Heading24">Friend Classes</A>
			<LI><A HREF="#Heading25">Listing 15.7. Friend class illustrated</A><A HREF="#Heading26">.</A>
			<LI><A HREF="#Heading27">Friend Class</A>
			<LI><A HREF="#Heading28">Friend Functions</A>
			<LI><A HREF="#Heading29">Friend Functions and Operator Overloading</A>
			<LI><A HREF="#Heading30">Listing 15.8. Friendly operator+.</A>
			<LI><A HREF="#Heading31">Friend Functions</A>
			<LI><A HREF="#Heading32">Overloading the Insertion Operator</A>
			<LI><A HREF="#Heading33">Listing 15.9. Overloading operator&lt;&lt;().</A>
			<LI><A HREF="#Heading34">Summary</A>
			<LI><A HREF="#Heading35">Q&amp;A</A>
			<LI><A HREF="#Heading36">Workshop</A>
			<UL>
				<LI><A HREF="#Heading37">Quiz</A>
				<LI><A HREF="#Heading38">Exercises</A>
			</UL>
		</UL>
	</UL>
</UL>

<P>
<HR SIZE="4">

<H2 ALIGN="CENTER"><A NAME="Heading1"></A><FONT COLOR="#000077">Day 15</FONT></H2>

<H2 ALIGN="CENTER"><A NAME="Heading2"></A><FONT COLOR="#000077">Advanced Inheritance</FONT></H2>
<P>So far you have worked with single and multiple inheritance to create is-a relationships.
Today you will learn

<UL>
	<LI>What containment is and how to model it.
	<P>
	<LI>What delegation is and how to model it.
	<P>
	<LI>How to implement one class in terms of another.
	<P>
	<LI>How to use private inheritance.
</UL>

<H3 ALIGN="CENTER"><A NAME="Heading3"></A><FONT COLOR="#000077">Containment</FONT></H3>
<P>As you have seen in previous examples, it is possible for the member data of a
class to include objects of another class. C++ programmers say that the outer class
contains the inner class. Thus, an <TT>Employee</TT> class might contain string objects
(for the name of the employee), as well as integers (for the employee's salary and
so forth).</P>
<P>Listing 15.1 describes an incomplete, but still useful, <TT>String</TT> class.
This listing does not produce any output. Instead Listing 15.1 will be used with
later listings.</P>

<P><A NAME="Heading4"></A><FONT SIZE="4" COLOR="#000077"><B>Listing 15.1. The String
class.</B></FONT>
<PRE><FONT COLOR="#0066FF">1:     #include &lt;iostream.h&gt;
2:     #include &lt;string.h&gt;
3:
4:     class String
5:     {
6:        public:
7:           // constructors
8:           String();
9:            String(const char *const);
10:           String(const String &amp;);
11:          ~String();
12:
13:          // overloaded operators
14:          char &amp; operator[](int offset);
15:          char operator[](int offset) const;
16:          String operator+(const String&amp;);
17:          void operator+=(const String&amp;);
18:          String &amp; operator= (const String &amp;);
19:
20:          // General accessors
21:          int GetLen()const { return itsLen; }
22:          const char * GetString() const { return itsString; }
23:          // static int ConstructorCount;
24:
25:       private:
26:          String (int);         // private constructor
27:          char * itsString;
28:          unsigned short itsLen;
29:
30:    };
31:
32:    // default constructor creates string of 0 bytes
33:    String::String()
34:    {
35:       itsString = new char[1];
36:       itsString[0] = `\0';
37:       itsLen=0;
38:       // cout &lt;&lt; &quot;\tDefault string constructor\n&quot;;
39:       // ConstructorCount++;
40:    }
41:
42:    // private (helper) constructor, used only by
43:    // class methods for creating a new string of
44:    // required size.  Null filled.
45:    String::String(int len)
46:    {
47:       itsString = new char[len+1];
48:       for (int i = 0; i&lt;=len; i++)
49:          itsString[i] = `\0';
50:       itsLen=len;
51:       // cout &lt;&lt; &quot;\tString(int) constructor\n&quot;;
52:       // ConstructorCount++;
53:    }
54:
55:    // Converts a character array to a String
56:    String::String(const char * const cString)
57:    {
58:       itsLen = strlen(cString);
59:       itsString = new char[itsLen+1];
60:       for (int i = 0; i&lt;itsLen; i++)
61:          itsString[i] = cString[i];
62:       itsString[itsLen]='\0';
63:       // cout &lt;&lt; &quot;\tString(char*) constructor\n&quot;;
64:       // ConstructorCount++;
65:    }
66:
67:    // copy constructor
68:    String::String (const String &amp; rhs)
69:    {
70:       itsLen=rhs.GetLen();
71:       itsString = new char[itsLen+1];
72:       for (int i = 0; i&lt;itsLen;i++)
73:          itsString[i] = rhs[i];
74:       itsString[itsLen] = `\0';
75:       // cout &lt;&lt; &quot;\tString(String&amp;) constructor\n&quot;;
76:       // ConstructorCount++;
77:    }
78:
79:    // destructor, frees allocated memory
80:    String::~String ()
81:    {
82:       delete [] itsString;
83:       itsLen = 0;
84:       // cout &lt;&lt; &quot;\tString destructor\n&quot;;
85:    }
86:
87:    // operator equals, frees existing memory
88:    // then copies string and size
89:    String&amp; String::operator=(const String &amp; rhs)
90:    {
91:       if (this == &amp;rhs)
92:          return *this;
93:       delete [] itsString;
94:       itsLen=rhs.GetLen();
95:       itsString = new char[itsLen+1];
96:       for (int i = 0; i&lt;itsLen;i++)
97:          itsString[i] = rhs[i];
98:       itsString[itsLen] = `\0';
99:       return *this;
100:      // cout &lt;&lt; &quot;\tString operator=\n&quot;;
101:   }
102:
103:   //non constant offset operator, returns
104:   // reference to character so it can be
105:   // changed!
106:   char &amp; String::operator[](int offset)
107:   {
108:      if (offset &gt; itsLen)
109:         return itsString[itsLen-1];
110:      else
111:         return itsString[offset];
112:   }
113:
114:   // constant offset operator for use
115:   // on const objects (see copy constructor!)
116:   char String::operator[](int offset) const
117:   {
118:      if (offset &gt; itsLen)
119:         return itsString[itsLen-1];
120:      else
121:         return itsString[offset];
122:   }
123:
124:   // creates a new string by adding current
125:   // string to rhs
126:   String String::operator+(const String&amp; rhs)
127:   {
128:      int  totalLen = itsLen + rhs.GetLen();
129:      String temp(totalLen);
130:      int i, j;
131:      for (i = 0; i&lt;itsLen; i++)
132:         temp[i] = itsString[i];
133:      for (j = 0; j&lt;rhs.GetLen(); j++, i++)
134:         temp[i] = rhs[j];
135:      temp[totalLen]='\0';
136:      return temp;
137:   }
138:
139:   // changes current string, returns nothing
140:   void String::operator+=(const String&amp; rhs)
141:   {
142:      unsigned short rhsLen = rhs.GetLen();
143:      unsigned short totalLen = itsLen + rhsLen;
144:      String  temp(totalLen);
145:      for (int i = 0; i&lt;itsLen; i++)
146:         temp[i] = itsString[i];
147:      for (int j = 0; j&lt;rhs.GetLen(); j++, i++)
148:         temp[i] = rhs[i-itsLen];
149:      temp[totalLen]='\0';
150:      *this = temp;
151:   }
152:
<TT>153: // int String::ConstructorCount = 0;</TT></FONT></PRE>
<P><TT><BR>
</TT><B>Output: </B>None.</P>
<P><FONT COLOR="#000077"><B>Analysis:</B></FONT><B> </B>Listing 15.1 provides a <TT>String</TT>
class much like the one used in Listing 11.14 of Day 11, &quot;Arrays.&quot; The
significant difference here is that the constructors and a few other functions in
Listing 11.14 have print statements to show their use, which are currently commented
out in Listing 15.1. These functions will be used in later examples.</P>
<P>On line 23, the static member variable <TT>ConstructorCount</TT> is declared,
and on line 153 it is initialized. This variable is incremented in each string constructor.
All of this is currently commented out; it will be used in a later listing.</P>
<P>Listing 15.2 describes an <TT>Employee</TT> class that contains three string objects.
Note that a number of statements are commented out; they will be used in later listings.</P>

<P><A NAME="Heading6"></A><FONT SIZE="4" COLOR="#000077"><B>Listing 15.2. The Employee
class and driver program.</B></FONT><FONT SIZE="4" COLOR="#0066FF"><B></B></FONT>
<PRE><FONT COLOR="#0066FF">1:     class Employee
2:     {
3:
4:     public:
5:        Employee();
6:        Employee(char *, char *, char *, long);
7:        ~Employee();
8:        Employee(const Employee&amp;);
9:        Employee &amp; operator= (const Employee &amp;);
10:
11:       const String &amp; GetFirstName() const 
12:          { return itsFirstName; }
13:       const String &amp; GetLastName() const { return itsLastName; }
14:       const String &amp; GetAddress() const { return itsAddress; }
15:       long GetSalary() const { return itsSalary; }
16:
17:       void SetFirstName(const String &amp; fName) 
18:           { itsFirstName = fName; }
19:       void SetLastName(const String &amp; lName) 
20:          { itsLastName = lName; }
21:       void SetAddress(const String &amp; address) 
22:            { itsAddress = address; }
23:       void SetSalary(long salary) { itsSalary = salary; }
24:    private:
25:       String    itsFirstName;
26:       String    itsLastName;
27:       String    itsAddress;
28:       long      itsSalary;
29:    };
30:
31:    Employee::Employee():
32:       itsFirstName(&quot;&quot;),
33:       itsLastName(&quot;&quot;),
34:       itsAddress(&quot;&quot;),
35:       itsSalary(0)
36:    {}
37:
38:    Employee::Employee(char * firstName, char * lastName,
39:       char * address, long salary):
40:       itsFirstName(firstName),
41:       itsLastName(lastName),
42:       itsAddress(address),
43:       itsSalary(salary)
44:    {}
45:
46:    Employee::Employee(const Employee &amp; rhs):
47:       itsFirstName(rhs.GetFirstName()),
48:       itsLastName(rhs.GetLastName()),
49:       itsAddress(rhs.GetAddress()),
50:       itsSalary(rhs.GetSalary())
51:    {}
52:
53:    Employee::~Employee() {}
54:
55:    Employee &amp; Employee::operator= (const Employee &amp; rhs)
56:    {
57:       if (this == &amp;rhs)
58:          return *this;
59:
60:       itsFirstName = rhs.GetFirstName();
61:       itsLastName = rhs.GetLastName();
62:       itsAddress = rhs.GetAddress();
63:       itsSalary = rhs.GetSalary();
64:
65:       return *this;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美精品区一区二区三区| 欧美午夜一区二区| 亚洲在线观看免费视频| 精品视频999| 欧美综合亚洲图片综合区| 亚洲丰满少妇videoshd| 亚洲欧美视频在线观看| 亚洲欧美视频一区| 亚洲美女视频在线| 亚洲老妇xxxxxx| 一区二区三区免费在线观看| 中文字幕一区三区| 亚洲精品国产一区二区精华液 | 成人小视频在线| 国产精品一区二区视频| 国产麻豆精品久久一二三| 国产精品69毛片高清亚洲| 成人免费av在线| 97精品超碰一区二区三区| 91久久精品一区二区三区| 欧美系列日韩一区| 欧美大片在线观看一区| 国产婷婷色一区二区三区在线| 99久久精品情趣| 久久99九九99精品| 懂色av中文字幕一区二区三区 | 国产福利电影一区二区三区| 顶级嫩模精品视频在线看| proumb性欧美在线观看| 精品一区二区成人精品| 国产精品一区二区91| 亚洲国产毛片aaaaa无费看| 奇米亚洲午夜久久精品| 国产成人亚洲综合色影视| 91在线视频在线| 9191成人精品久久| 国产精品久久久久毛片软件| 五月婷婷激情综合| 中文字幕一区二区三区乱码在线| 欧美大胆人体bbbb| 综合久久综合久久| 日韩精品一区二区三区三区免费| 一本一道综合狠狠老| 欧美一级日韩免费不卡| 中文字幕不卡一区| 五月婷婷激情综合| 亚洲精品五月天| 国产九九视频一区二区三区| 91欧美一区二区| 99vv1com这只有精品| 日韩精品一区二区三区四区| 一区二区三区在线观看欧美| 国产成人在线影院 | 欧美四级电影网| 欧美国产一区二区在线观看| 欧美xxxxxxxxx| 亚洲国产cao| 91免费国产在线| 中文字幕精品一区二区三区精品| 国产无一区二区| 国产精品的网站| 天天综合天天综合色| 97se亚洲国产综合在线| 日本一区二区三区高清不卡| 看国产成人h片视频| 欧美日韩精品欧美日韩精品 | 青娱乐精品视频在线| 91久久精品一区二区三| 国产精品久99| 不卡的av在线| 成人免费一区二区三区视频 | 欧美日韩一区二区三区视频| 日韩一区在线播放| 成人午夜伦理影院| 国产午夜精品久久久久久免费视| 国产精品久久777777| 丁香六月久久综合狠狠色| 精品国产免费人成在线观看| 蜜桃久久精品一区二区| 欧美一区二区视频观看视频| 欧美激情综合五月色丁香小说| 国产精品久久久久天堂| 香蕉影视欧美成人| 欧美久久婷婷综合色| 亚洲午夜久久久久久久久久久| 日本欧美在线看| 欧美成人精品福利| 国产乱人伦偷精品视频免下载| 99精品黄色片免费大全| 日韩毛片视频在线看| 一本大道综合伊人精品热热| 亚洲一区欧美一区| 成人免费av资源| 伊人婷婷欧美激情| 在线播放中文一区| 精品一区二区三区久久久| 国产色爱av资源综合区| 91亚洲国产成人精品一区二三| 亚洲精品一区二区三区四区高清| 一个色综合网站| 欧美一级欧美一级在线播放| 国产乱子轮精品视频| 中文字幕在线不卡一区二区三区| 精品无码三级在线观看视频| 欧美性猛交一区二区三区精品| 久久综合九色综合欧美亚洲| 成人精品国产免费网站| 亚洲成人精品影院| 久久综合成人精品亚洲另类欧美 | 91福利在线观看| 蜜臀久久99精品久久久画质超高清 | 欧美性一级生活| 精品一区二区久久| 亚洲综合色在线| 久久精品一区二区三区不卡| 色婷婷av一区二区三区软件| 蜜臀av亚洲一区中文字幕| 国产精品国产三级国产普通话蜜臀 | 国产.欧美.日韩| 亚洲一本大道在线| 国产精品区一区二区三区| 蜜臀久久99精品久久久画质超高清| 欧美日韩激情一区二区三区| 一二三区精品视频| 日本韩国视频一区二区| 中文字幕一区二区三区视频| www.性欧美| 久草这里只有精品视频| 亚洲电影第三页| 69堂成人精品免费视频| www.日韩在线| 成人精品国产福利| 国产在线日韩欧美| 日韩av电影天堂| 亚洲激情自拍偷拍| 欧美巨大另类极品videosbest | 色婷婷激情综合| 粉嫩av一区二区三区| 久久99精品久久久久久久久久久久 | 国产一区三区三区| 国产欧美一区二区在线观看| 成人丝袜18视频在线观看| 久久精品国产一区二区| 午夜精品福利一区二区蜜股av| 日韩欧美成人午夜| 欧美一区二区在线看| 91精品国产综合久久精品麻豆 | 色94色欧美sute亚洲线路一久 | 99久久久精品免费观看国产蜜| 一区二区在线观看免费视频播放| 欧美三级韩国三级日本一级| 免费欧美在线视频| 毛片不卡一区二区| 老司机精品视频在线| 人人精品人人爱| 精品制服美女久久| 精品制服美女丁香| 国产精品1区二区.| 国产乱码精品一区二区三区五月婷| 亚洲欧美一区二区久久| 一区二区三区久久| 亚洲国产欧美在线| 国产精品美日韩| 日韩理论片网站| 亚洲自拍欧美精品| 久久久久国色av免费看影院| 久久尤物电影视频在线观看| 欧美精品一区二区三区视频| 26uuuu精品一区二区| 日本一区二区视频在线| 中文字幕一区二区日韩精品绯色| 日韩欧美黄色影院| 2023国产精华国产精品| 国产精品丝袜91| 亚洲第一二三四区| 精品制服美女久久| 92国产精品观看| 成人免费高清视频在线观看| 色综合天天做天天爱| 91精品免费在线| 国产精品成人免费| 亚洲成av人片观看| 成人午夜看片网址| 国产原创一区二区| 免费观看91视频大全| 国产精品 欧美精品| 91九色02白丝porn| 精品久久一区二区三区| 亚洲欧美另类综合偷拍| 久久精品国内一区二区三区 | 日韩免费一区二区| 国产精品免费久久| 中文字幕国产一区二区| 亚洲午夜电影在线观看| 成人综合日日夜夜| 欧美一区二区高清| 亚洲欧美日韩系列| 国产精品一区二区久久精品爱涩| 激情文学综合丁香| 欧美人与禽zozo性伦|