亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
粉嫩久久99精品久久久久久夜| 欧美体内she精高潮| 色婷婷激情一区二区三区| 欧美高清性hdvideosex| 一区在线观看视频| 紧缚捆绑精品一区二区| 欧美日韩一二区| 亚洲天堂av一区| 国产精品伊人色| 日韩亚洲欧美中文三级| 一级特黄大欧美久久久| 99热国产精品| 国产精品视频一区二区三区不卡| 蜜臀久久99精品久久久久久9| 在线一区二区三区四区五区| 国产精品久久福利| 国产精品一线二线三线| 精品成人私密视频| 久久99国产精品成人| 在线播放日韩导航| 香蕉成人啪国产精品视频综合网| 97精品电影院| 中文字幕在线观看一区二区| 粉嫩久久99精品久久久久久夜| 欧美在线短视频| 国产精品麻豆99久久久久久| 国产乱色国产精品免费视频| www成人在线观看| 精品亚洲aⅴ乱码一区二区三区| 日韩欧美一区在线| 另类小说综合欧美亚洲| 日韩午夜激情av| 捆绑紧缚一区二区三区视频| 日韩欧美一卡二卡| 国产尤物一区二区| 久久久精品国产99久久精品芒果| 国产美女一区二区三区| 国产色产综合色产在线视频 | 91麻豆自制传媒国产之光| 久久看人人爽人人| 国产成人午夜高潮毛片| 国产精品久久一卡二卡| 色诱视频网站一区| 亚洲自拍偷拍九九九| 欧美精品精品一区| 精品一区精品二区高清| 中文字幕乱码一区二区免费| 91免费视频网址| 亚洲国产日韩a在线播放| 91精品午夜视频| 国产一区二区美女| 亚洲日韩欧美一区二区在线| 欧美在线制服丝袜| 久久精品免费观看| 欧美激情在线免费观看| 91国产免费观看| 久久成人av少妇免费| 国产精品乱码人人做人人爱| 91官网在线观看| 激情图区综合网| 亚洲视频图片小说| 日韩女优制服丝袜电影| 9久草视频在线视频精品| 午夜视频在线观看一区二区| 久久久久久毛片| 91麻豆免费在线观看| 免费成人在线影院| 亚洲欧美在线高清| 日韩欧美国产一二三区| 97精品久久久午夜一区二区三区| 综合欧美亚洲日本| 精品美女在线观看| 欧美在线色视频| 国产精品乡下勾搭老头1| 亚洲不卡一区二区三区| 国产精品麻豆久久久| 日韩一级成人av| 91国内精品野花午夜精品| 国产剧情在线观看一区二区| 亚洲一区二区三区国产| 欧美国产日本韩| 91精品国产黑色紧身裤美女| 99在线精品免费| 韩国精品久久久| 午夜影院在线观看欧美| 亚洲欧美偷拍三级| 欧美激情综合网| 精品国产麻豆免费人成网站| 欧美日韩一卡二卡三卡| 99久久国产综合精品女不卡| 国产在线国偷精品免费看| 天堂一区二区在线免费观看| 亚洲日本va午夜在线电影| 久久九九影视网| 欧美成人在线直播| 欧美蜜桃一区二区三区| 91蜜桃网址入口| 成人小视频在线| 国产一区二区三区在线观看免费视频| 亚洲一区在线播放| 亚洲卡通欧美制服中文| 欧美国产日本视频| 国产欧美日韩卡一| 精品国产凹凸成av人网站| 欧美一区二区在线观看| 欧美老肥妇做.爰bbww| 欧美在线视频全部完| 色系网站成人免费| 色综合av在线| 日本电影亚洲天堂一区| 色成年激情久久综合| 色狠狠色噜噜噜综合网| 日本伦理一区二区| 在线视频一区二区三区| 91久久精品一区二区| 欧美一a一片一级一片| 欧美影院精品一区| 欧美日本国产视频| 337p亚洲精品色噜噜狠狠| 欧美人狂配大交3d怪物一区| 欧美酷刑日本凌虐凌虐| 欧美一区二区三区在线看| 日韩欧美一级二级| 久久久精品免费免费| 亚洲国产成人午夜在线一区| 国产精品电影一区二区三区| 中文字幕一区二区三区不卡在线 | 亚洲乱码中文字幕综合| 亚洲激情六月丁香| 亚洲地区一二三色| 免费成人深夜小野草| 国产一区二区免费在线| 成人免费va视频| 在线观看91精品国产入口| 欧美日本在线一区| 久久综合色婷婷| 亚洲欧洲成人精品av97| 亚洲国产美女搞黄色| 日韩综合小视频| 国产乱码精品一区二区三区av| 成人av电影免费在线播放| 日本乱码高清不卡字幕| 日韩一区二区三区精品视频 | 88在线观看91蜜桃国自产| 欧美大片一区二区| 国产蜜臀av在线一区二区三区| 亚洲蜜臀av乱码久久精品蜜桃| 性做久久久久久| 国产成人av自拍| 欧美揉bbbbb揉bbbbb| 精品人在线二区三区| 亚洲欧美激情小说另类| 久久99精品国产.久久久久 | 国产精品国产馆在线真实露脸| 亚洲国产aⅴ成人精品无吗| 国产主播一区二区三区| 在线日韩av片| 国产嫩草影院久久久久| 丝袜a∨在线一区二区三区不卡| 国产超碰在线一区| 欧美日韩小视频| 中文字幕中文字幕在线一区| 日韩成人免费看| 91久久人澡人人添人人爽欧美 | 欧美日韩午夜在线| 国产精品―色哟哟| 久久成人免费网| 欧美在线不卡视频| 国产精品天天摸av网| 蜜臀久久99精品久久久久久9| 日本二三区不卡| 亚洲欧洲一区二区在线播放| 老司机免费视频一区二区三区| 欧美在线观看你懂的| 亚洲欧洲精品一区二区三区| 国产麻豆精品一区二区| 欧美酷刑日本凌虐凌虐| 有坂深雪av一区二区精品| 高清不卡一区二区在线| 日韩精品中午字幕| 日本欧美久久久久免费播放网| 91麻豆免费观看| 一区免费观看视频| 丰满白嫩尤物一区二区| 久久精子c满五个校花| 精品在线一区二区三区| 6080国产精品一区二区| 香蕉乱码成人久久天堂爱免费| 色婷婷综合久久久中文字幕| **性色生活片久久毛片| 不卡的看片网站| 国产精品美女久久久久aⅴ国产馆| 国产尤物一区二区在线| 欧美电影精品一区二区| 九九国产精品视频| 精品少妇一区二区三区在线播放 | 一区av在线播放| 色天天综合久久久久综合片| 亚洲视频一区二区免费在线观看| eeuss鲁片一区二区三区在线观看|