温州机场航鹏翔空货运 發表於 2025-12-16 23:52:00

实验5

<p>实验任务1:</p>
<p>代码:</p>
<p>publisher.cpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> #include &lt;iostream&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span> #include <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">publisher.hpp</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> Publisher::Publisher(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">name_): name {name_} {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> Book::Book(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;name_ , <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">author_ ): Publisher{name_}, author{author_} {
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Book::publish() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Publishing book《</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; name &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">》 by </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; author &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">15</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Book::use() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">17</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Reading book 《</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; name &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">》 by </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; author &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">19</span>
<span style="color: rgba(0, 128, 128, 1)">20</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> Film::Film(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;name_, <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">director_):Publisher{name_},director{director_} {
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">23</span>
<span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Film::publish() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">25</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Publishing film &lt;</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; name &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">&gt; directed by </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; director &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">27</span>
<span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Film::use() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">29</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Watching film &lt;</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; name &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">&gt; directed by </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; director &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">31</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>
<span style="color: rgba(0, 128, 128, 1)">33</span> Music::Music(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;name_, <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">artist_): Publisher{name_}, artist{artist_} {
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">35</span>
<span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Music::publish() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">37</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Publishing music &lt;</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; name &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">&gt; by </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; artist &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">39</span>
<span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Music::use() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">41</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Listening to music &lt;</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; name &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">&gt; by </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; artist &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">42</span> }</pre>
</div>
<p>publisher.hpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">#pragma</span> once
<span style="color: rgba(0, 128, 128, 1)"> 2</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> #include &lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Publisher {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   Publisher(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;name_ = <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>   <span style="color: rgba(0, 0, 255, 1)">virtual</span> ~Publisher() = <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">11</span>   <span style="color: rgba(0, 0, 255, 1)">virtual</span> <span style="color: rgba(0, 0, 255, 1)">void</span> publish() <span style="color: rgba(0, 0, 255, 1)">const</span> = <span style="color: rgba(128, 0, 128, 1)">0</span>;               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 纯虚函数,作为接口继承</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>   <span style="color: rgba(0, 0, 255, 1)">virtual</span> <span style="color: rgba(0, 0, 255, 1)">void</span> use() <span style="color: rgba(0, 0, 255, 1)">const</span> = <span style="color: rgba(128, 0, 128, 1)">0</span>;                     <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 纯虚函数,作为接口继承</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">protected</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> name;    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 发行/出版物名称</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">};
</span><span style="color: rgba(0, 128, 128, 1)">17</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 图书类: Book</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">class</span> Book: <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Publisher {
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">21</span>   Book(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;name_ = <span style="color: rgba(128, 0, 0, 1)">""</span>, <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;author_ = <span style="color: rgba(128, 0, 0, 1)">""</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 构造函数</span>
<span style="color: rgba(0, 128, 128, 1)">22</span>
<span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">24</span>   <span style="color: rgba(0, 0, 255, 1)">void</span> publish() <span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">override</span>;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接口</span>
<span style="color: rgba(0, 128, 128, 1)">25</span>   <span style="color: rgba(0, 0, 255, 1)">void</span> use() <span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">override</span>;            <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接口</span>
<span style="color: rgba(0, 128, 128, 1)">26</span>
<span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">28</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> author;          <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 作者</span>
<span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">};
</span><span style="color: rgba(0, 128, 128, 1)">30</span>
<span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 电影类: Film</span>
<span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 255, 1)">class</span> Film: <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Publisher {
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">34</span>   Film(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;name_ = <span style="color: rgba(128, 0, 0, 1)">""</span>, <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;director_ = <span style="color: rgba(128, 0, 0, 1)">""</span>);   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 构造函数</span>
<span style="color: rgba(0, 128, 128, 1)">35</span>
<span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">37</span>   <span style="color: rgba(0, 0, 255, 1)">void</span> publish() <span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">override</span>;    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接口</span>
<span style="color: rgba(0, 128, 128, 1)">38</span>   <span style="color: rgba(0, 0, 255, 1)">void</span> use() <span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">override</span>;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接口            </span>
<span style="color: rgba(0, 128, 128, 1)">39</span>
<span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">41</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> director;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 导演</span>
<span style="color: rgba(0, 128, 128, 1)">42</span> <span style="color: rgba(0, 0, 0, 1)">};
</span><span style="color: rgba(0, 128, 128, 1)">43</span>
<span style="color: rgba(0, 128, 128, 1)">44</span>
<span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 音乐类:Music</span>
<span style="color: rgba(0, 128, 128, 1)">46</span> <span style="color: rgba(0, 0, 255, 1)">class</span> Music: <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Publisher {
</span><span style="color: rgba(0, 128, 128, 1)">47</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">48</span>   Music(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;name_ = <span style="color: rgba(128, 0, 0, 1)">""</span>, <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;artist_ = <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">49</span>
<span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">51</span>   <span style="color: rgba(0, 0, 255, 1)">void</span> publish() <span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">override</span>;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接口</span>
<span style="color: rgba(0, 128, 128, 1)">52</span>   <span style="color: rgba(0, 0, 255, 1)">void</span> use() <span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">override</span>;            <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 接口</span>
<span style="color: rgba(0, 128, 128, 1)">53</span>
<span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">55</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> artist;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 音乐艺术家名称</span>
<span style="color: rgba(0, 128, 128, 1)">56</span> };</pre>
</div>
<p>task1.cpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> #include &lt;memory&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;iostream&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span> #include &lt;vector&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span> #include <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">publisher.hpp</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test1() {
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>    std::vector&lt;Publisher *&gt;<span style="color: rgba(0, 0, 0, 1)"> v;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>    v.push_back(<span style="color: rgba(0, 0, 255, 1)">new</span> Book(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Harry Potter</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">J.K. Rowling</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">10</span>    v.push_back(<span style="color: rgba(0, 0, 255, 1)">new</span> Film(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">The Godfather</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Francis Ford Coppola</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">11</span>    v.push_back(<span style="color: rgba(0, 0, 255, 1)">new</span> Music(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Blowing in the wind</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Bob Dylan</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>    <span style="color: rgba(0, 0, 255, 1)">for</span>(Publisher *<span style="color: rgba(0, 0, 0, 1)">ptr: v) {
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         ptr-&gt;<span style="color: rgba(0, 0, 0, 1)">publish();
</span><span style="color: rgba(0, 128, 128, 1)">15</span>         ptr-&gt;<span style="color: rgba(0, 0, 0, 1)">use();
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">17</span>         <span style="color: rgba(0, 0, 255, 1)">delete</span><span style="color: rgba(0, 0, 0, 1)"> ptr;
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">   }
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">20</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test2() {
</span><span style="color: rgba(0, 128, 128, 1)">22</span>   std::vector&lt;std::unique_ptr&lt;Publisher&gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> v;
</span><span style="color: rgba(0, 128, 128, 1)">23</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>   v.push_back(std::make_unique&lt;Book&gt;(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Harry Potter</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">J.K. Rowling</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">25</span>   v.push_back(std::make_unique&lt;Film&gt;(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">The Godfather</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Francis Ford Coppola</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">26</span>   v.push_back(std::make_unique&lt;Music&gt;(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Blowing in the wind</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Bob Dylan</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">27</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>   <span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">const</span> auto &amp;<span style="color: rgba(0, 0, 0, 1)">ptr: v) {
</span><span style="color: rgba(0, 128, 128, 1)">29</span>         ptr-&gt;<span style="color: rgba(0, 0, 0, 1)">publish();
</span><span style="color: rgba(0, 128, 128, 1)">30</span>         ptr-&gt;<span style="color: rgba(0, 0, 0, 1)">use();
</span><span style="color: rgba(0, 128, 128, 1)">31</span>         std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">34</span>
<span style="color: rgba(0, 128, 128, 1)">35</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test3() {
</span><span style="color: rgba(0, 128, 128, 1)">36</span>   Book book(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">A Philosophy of Software Design</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">John Ousterhout</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 0, 1)">    book.publish();
</span><span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 0, 1)">    book.use();
</span><span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">40</span>
<span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> main() {
</span><span style="color: rgba(0, 128, 128, 1)">42</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">运行时多态:纯虚函数、抽象类\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">43</span>
<span style="color: rgba(0, 128, 128, 1)">44</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\n测试1: 使用原始指针\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 0, 1)">    test1();
</span><span style="color: rgba(0, 128, 128, 1)">46</span>
<span style="color: rgba(0, 128, 128, 1)">47</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\n测试2: 使用智能指针\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">48</span> <span style="color: rgba(0, 0, 0, 1)">    test2();
</span><span style="color: rgba(0, 128, 128, 1)">49</span>
<span style="color: rgba(0, 128, 128, 1)">50</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\n测试3: 直接使用类\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">51</span> <span style="color: rgba(0, 0, 0, 1)">    test3();
</span><span style="color: rgba(0, 128, 128, 1)">52</span> }</pre>
</div>
<p>运行测试截图:</p>
<p><img src="https://img2024.cnblogs.com/blog/3526577/202512/3526577-20251216193756762-954707300.png"></p>
<p>回答问题:</p>
<p>问题1:</p>
<p>(1)Publisher类中包含纯虚函数。具体依据:virtual void publish() const = 0;和virtual void use() const = 0;</p>
<p>(2)不能编译通过。因为抽象类不能实例化对象。</p>
<p>问题2:</p>
<p>(1)void publish() const override;</p>
<p>void use() const override;</p>
<p>(2)函数签名与基类不匹配,无法重写</p>
<p>问题3:</p>
<p>(1)ptr的声明类型是Publisher*</p>
<p>(2)Book, Film, Music</p>
<p>(3)原因:实现多态析构,确保删除派生类对象时,先调用派生类析构函数,再调用基类析构函数,避免内存泄漏;若删除virtual,派生类的析构函数不被调用,内存泄漏。</p>
<p>&nbsp;</p>
<p>实验任务2:</p>
<p>代码:</p>
<p>book.hpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">#pragma</span> once
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 图书描述信息类Book: 声明</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Book {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   Book(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">name_,
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>          <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">author_,
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>          <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">translator_,
</span><span style="color: rgba(0, 128, 128, 1)">10</span>          <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">isbn_,
</span><span style="color: rgba(0, 128, 128, 1)">11</span>          <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> price_);
</span><span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>   friend std::ostream&amp; <span style="color: rgba(0, 0, 255, 1)">operator</span>&lt;&lt;(std::ostream &amp;<span style="color: rgba(0, 0, 255, 1)">out</span>, <span style="color: rgba(0, 0, 255, 1)">const</span> Book &amp;<span style="color: rgba(0, 0, 0, 1)">book);
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> name;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 书名</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> author;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 作者</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> translator;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 译者</span>
<span style="color: rgba(0, 128, 128, 1)">19</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> isbn;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> isbn号</span>
<span style="color: rgba(0, 128, 128, 1)">20</span>   <span style="color: rgba(0, 0, 255, 1)">double</span> price;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 定价</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> };</pre>
</div>
<p>book.cpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> #include &lt;iomanip&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;iostream&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span> #include &lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span> #include <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">book.hpp</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 图书描述信息类Book: 实现</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> Book::Book(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">name_,
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">author_,
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">translator_,
</span><span style="color: rgba(0, 128, 128, 1)">11</span>         <span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> &amp;<span style="color: rgba(0, 0, 0, 1)">isbn_,
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> price_):name{name_}, author{author_}, translator{translator_}, isbn{isbn_}, price{price_} {
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 运算符&lt;&lt;重载实现</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> std::ostream&amp; <span style="color: rgba(0, 0, 255, 1)">operator</span>&lt;&lt;(std::ostream &amp;<span style="color: rgba(0, 0, 255, 1)">out</span>, <span style="color: rgba(0, 0, 255, 1)">const</span> Book &amp;<span style="color: rgba(0, 0, 0, 1)">book) {
</span><span style="color: rgba(0, 128, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::left;
</span><span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::setw;
</span><span style="color: rgba(0, 128, 128, 1)">19</span>   
<span style="color: rgba(0, 128, 128, 1)">20</span>   <span style="color: rgba(0, 0, 255, 1)">out</span> &lt;&lt;<span style="color: rgba(0, 0, 0, 1)"> left;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>   <span style="color: rgba(0, 0, 255, 1)">out</span> &lt;&lt; setw(<span style="color: rgba(128, 0, 128, 1)">15</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">书名:</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; book.name &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">22</span>         &lt;&lt; setw(<span style="color: rgba(128, 0, 128, 1)">15</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">作者:</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; book.author &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">23</span>         &lt;&lt; setw(<span style="color: rgba(128, 0, 128, 1)">15</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">译者:</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; book.translator &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>         &lt;&lt; setw(<span style="color: rgba(128, 0, 128, 1)">15</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ISBN:</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; book.isbn &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">25</span>         &lt;&lt; setw(<span style="color: rgba(128, 0, 128, 1)">15</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">定价:</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt;<span style="color: rgba(0, 0, 0, 1)"> book.price;
</span><span style="color: rgba(0, 128, 128, 1)">26</span>
<span style="color: rgba(0, 128, 128, 1)">27</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">out</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">28</span> }</pre>
</div>
<p>booksale.hpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">#pragma</span> once
<span style="color: rgba(0, 128, 128, 1)"> 2</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> #include &lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span> #include <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">book.hpp</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 图书销售记录类BookSales:声明</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> BookSale {
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   BookSale(<span style="color: rgba(0, 0, 255, 1)">const</span> Book &amp;rb_, <span style="color: rgba(0, 0, 255, 1)">double</span> sales_price_, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> sales_amount_);
</span><span style="color: rgba(0, 128, 128, 1)">10</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> get_amount() <span style="color: rgba(0, 0, 255, 1)">const</span>;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回销售数量</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>   <span style="color: rgba(0, 0, 255, 1)">double</span> get_revenue() <span style="color: rgba(0, 0, 255, 1)">const</span>;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回营收</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>   
<span style="color: rgba(0, 128, 128, 1)">13</span>   friend std::ostream&amp; <span style="color: rgba(0, 0, 255, 1)">operator</span>&lt;&lt;(std::ostream &amp;<span style="color: rgba(0, 0, 255, 1)">out</span>, <span style="color: rgba(0, 0, 255, 1)">const</span> BookSale &amp;<span style="color: rgba(0, 0, 0, 1)">item);
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">    Book rb;         
</span><span style="color: rgba(0, 128, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">double</span> sales_price;      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 售价</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">int</span> sales_amount;       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 销售数量</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> };</pre>
</div>
<p>booksale.cpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> #include &lt;iomanip&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;iostream&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span> #include &lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span> #include <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">booksale.hpp</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 图书销售记录类BookSales:实现</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> BookSale::BookSale(<span style="color: rgba(0, 0, 255, 1)">const</span> Book &amp;<span style="color: rgba(0, 0, 0, 1)">rb_,
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>                  <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> sales_price_,
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>                  <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> sales_amount_): rb{rb_}, sales_price{sales_price_}, sales_amount{sales_amount_} {
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 255, 1)">int</span> BookSale::get_amount() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sales_amount;
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">15</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 255, 1)">double</span> BookSale::get_revenue() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> sales_amount *<span style="color: rgba(0, 0, 0, 1)"> sales_price;
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">19</span>
<span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 运算符&lt;&lt;重载实现</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> std::ostream&amp; <span style="color: rgba(0, 0, 255, 1)">operator</span>&lt;&lt;(std::ostream &amp;<span style="color: rgba(0, 0, 255, 1)">out</span>, <span style="color: rgba(0, 0, 255, 1)">const</span> BookSale &amp;<span style="color: rgba(0, 0, 0, 1)">item) {
</span><span style="color: rgba(0, 128, 128, 1)">22</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::left;
</span><span style="color: rgba(0, 128, 128, 1)">23</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::setw;
</span><span style="color: rgba(0, 128, 128, 1)">24</span>   
<span style="color: rgba(0, 128, 128, 1)">25</span>   <span style="color: rgba(0, 0, 255, 1)">out</span> &lt;&lt;<span style="color: rgba(0, 0, 0, 1)"> left;
</span><span style="color: rgba(0, 128, 128, 1)">26</span>   <span style="color: rgba(0, 0, 255, 1)">out</span> &lt;&lt; item.rb &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">27</span>         &lt;&lt; setw(<span style="color: rgba(128, 0, 128, 1)">15</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">售价:</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; item.sales_price &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>         &lt;&lt; setw(<span style="color: rgba(128, 0, 128, 1)">15</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">销售数量:</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; item.sales_amount &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">29</span>         &lt;&lt; setw(<span style="color: rgba(128, 0, 128, 1)">15</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">营收:</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt;<span style="color: rgba(0, 0, 0, 1)"> item.get_revenue();
</span><span style="color: rgba(0, 128, 128, 1)">30</span>
<span style="color: rgba(0, 128, 128, 1)">31</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">out</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">32</span> }</pre>
</div>
<p>task2.cpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> #include &lt;algorithm&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;iomanip&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span> #include &lt;iostream&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span> #include &lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span> #include &lt;vector&gt;
<span style="color: rgba(0, 128, 128, 1)"> 6</span> #include <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">booksale.hpp</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 按图书销售数量比较</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 255, 1)">bool</span> compare_by_amount(<span style="color: rgba(0, 0, 255, 1)">const</span> BookSale &amp;x1, <span style="color: rgba(0, 0, 255, 1)">const</span> BookSale &amp;<span style="color: rgba(0, 0, 0, 1)">x2) {
</span><span style="color: rgba(0, 128, 128, 1)">10</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> x1.get_amount() &gt;<span style="color: rgba(0, 0, 0, 1)"> x2.get_amount();
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test() {
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::cin;
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::cout;
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::getline;
</span><span style="color: rgba(0, 128, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::sort;
</span><span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">using</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">19</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::vector;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::ws;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>
<span style="color: rgba(0, 128, 128, 1)">22</span>   vector&lt;BookSale&gt; sales_records;         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 图书销售记录表</span>
<span style="color: rgba(0, 128, 128, 1)">23</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>   <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> books_number;
</span><span style="color: rgba(0, 128, 128, 1)">25</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入图书数量: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">26</span>   cin &gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> books_number;
</span><span style="color: rgba(0, 128, 128, 1)">27</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入图书销售记录\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">29</span>   <span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">int</span> i = <span style="color: rgba(128, 0, 128, 1)">0</span>; i &lt; books_number; ++<span style="color: rgba(0, 0, 0, 1)">i) {
</span><span style="color: rgba(0, 128, 128, 1)">30</span>         <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> name, author, translator, isbn;
</span><span style="color: rgba(0, 128, 128, 1)">31</span>         <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> price;
</span><span style="color: rgba(0, 128, 128, 1)">32</span>         cout &lt;&lt; <span style="color: rgba(0, 0, 255, 1)">string</span>(<span style="color: rgba(128, 0, 128, 1)">20</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-</span><span style="color: rgba(128, 0, 0, 1)">'</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">第</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; i+<span style="color: rgba(128, 0, 128, 1)">1</span> &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">本图书信息录入</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; <span style="color: rgba(0, 0, 255, 1)">string</span>(<span style="color: rgba(128, 0, 128, 1)">20</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-</span><span style="color: rgba(128, 0, 0, 1)">'</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">33</span>         cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入书名: </span><span style="color: rgba(128, 0, 0, 1)">"</span>; getline(cin&gt;&gt;<span style="color: rgba(0, 0, 0, 1)">ws, name);
</span><span style="color: rgba(0, 128, 128, 1)">34</span>         cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入作者: </span><span style="color: rgba(128, 0, 0, 1)">"</span>; getline(cin&gt;&gt;<span style="color: rgba(0, 0, 0, 1)">ws, author);
</span><span style="color: rgba(0, 128, 128, 1)">35</span>         cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入译者: </span><span style="color: rgba(128, 0, 0, 1)">"</span>; getline(cin&gt;&gt;<span style="color: rgba(0, 0, 0, 1)">ws, translator);
</span><span style="color: rgba(0, 128, 128, 1)">36</span>         cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入isbn: </span><span style="color: rgba(128, 0, 0, 1)">"</span>; getline(cin&gt;&gt;<span style="color: rgba(0, 0, 0, 1)">ws, isbn);
</span><span style="color: rgba(0, 128, 128, 1)">37</span>         cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入定价: </span><span style="color: rgba(128, 0, 0, 1)">"</span>; cin &gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> price;
</span><span style="color: rgba(0, 128, 128, 1)">38</span>
<span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 0, 1)">      Book book(name, author, translator, isbn, price);
</span><span style="color: rgba(0, 128, 128, 1)">40</span>
<span style="color: rgba(0, 128, 128, 1)">41</span>         <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> sales_price;
</span><span style="color: rgba(0, 128, 128, 1)">42</span>         <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> sales_amount;
</span><span style="color: rgba(0, 128, 128, 1)">43</span>
<span style="color: rgba(0, 128, 128, 1)">44</span>         cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入售价: </span><span style="color: rgba(128, 0, 0, 1)">"</span>; cin &gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> sales_price;
</span><span style="color: rgba(0, 128, 128, 1)">45</span>         cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">录入销售数量: </span><span style="color: rgba(128, 0, 0, 1)">"</span>; cin &gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> sales_amount;
</span><span style="color: rgba(0, 128, 128, 1)">46</span>
<span style="color: rgba(0, 128, 128, 1)">47</span> <span style="color: rgba(0, 0, 0, 1)">      BookSale record(book, sales_price, sales_amount);
</span><span style="color: rgba(0, 128, 128, 1)">48</span> <span style="color: rgba(0, 0, 0, 1)">      sales_records.push_back(record);
</span><span style="color: rgba(0, 128, 128, 1)">49</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">50</span>
<span style="color: rgba(0, 128, 128, 1)">51</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 按销售册数排序</span>
<span style="color: rgba(0, 128, 128, 1)">52</span> <span style="color: rgba(0, 0, 0, 1)">    sort(sales_records.begin(), sales_records.end(), compare_by_amount);
</span><span style="color: rgba(0, 128, 128, 1)">53</span>
<span style="color: rgba(0, 128, 128, 1)">54</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 按销售册数降序输出图书销售信息</span>
<span style="color: rgba(0, 128, 128, 1)">55</span>   cout &lt;&lt; <span style="color: rgba(0, 0, 255, 1)">string</span>(<span style="color: rgba(128, 0, 128, 1)">20</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span>) &lt;&lt;<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">图书销售统计</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; <span style="color: rgba(0, 0, 255, 1)">string</span>(<span style="color: rgba(128, 0, 128, 1)">20</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">=</span><span style="color: rgba(128, 0, 0, 1)">'</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">56</span>   <span style="color: rgba(0, 0, 255, 1)">for</span>(auto &amp;<span style="color: rgba(0, 0, 0, 1)">record: sales_records) {
</span><span style="color: rgba(0, 128, 128, 1)">57</span>         cout &lt;&lt; record &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">58</span>         cout &lt;&lt; <span style="color: rgba(0, 0, 255, 1)">string</span>(<span style="color: rgba(128, 0, 128, 1)">40</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-</span><span style="color: rgba(128, 0, 0, 1)">'</span>) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">59</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">60</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">61</span>
<span style="color: rgba(0, 128, 128, 1)">62</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> main() {
</span><span style="color: rgba(0, 128, 128, 1)">63</span> <span style="color: rgba(0, 0, 0, 1)">    test();
</span><span style="color: rgba(0, 128, 128, 1)">64</span> }</pre>
</div>
<p>运行测试截图:</p>
<p><img src="https://img2024.cnblogs.com/blog/3526577/202512/3526577-20251216221348249-1141424125.png"></p>
<p>&nbsp;回答问题:</p>
<p>问题1:</p>
<p>(1)两处。Book类型和BookSale类型</p>
<p>(2)book.cpp中:std::ostream&amp; operator&lt;&lt;(std::ostream &amp;out, const Book &amp;book);</p>
<p>booksale.cpp中:std::ostream&amp; operator&lt;&lt;(std::ostream &amp;out, const BookSale &amp;item);</p>
<p>task2.cpp中:cout &lt;&lt; t &lt;&lt;endl;</p>
<p>问题2:</p>
<p>(1)使用 std::sort 函数,配合自定义比较函数 compare_by_amount</p>
<p>&nbsp;</p>
<p>实验任务4:</p>
<p>pet.hpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">#pragma</span> once
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MachinePet {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   MachinePet(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span>&amp;<span style="color: rgba(0, 0, 0, 1)"> nickname_) : nickname(nickname_) {}
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   <span style="color: rgba(0, 0, 255, 1)">virtual</span> ~MachinePet() = <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> get_nickname() <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> nickname;
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">12</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>   <span style="color: rgba(0, 0, 255, 1)">virtual</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span> talk() <span style="color: rgba(0, 0, 255, 1)">const</span> = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">protected</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> nickname;
<span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">};
</span><span style="color: rgba(0, 128, 128, 1)">18</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">class</span> PetCat : <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MachinePet {
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">21</span>   PetCat(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span>&amp;<span style="color: rgba(0, 0, 0, 1)"> nickname_) : MachinePet(nickname_) {}
</span><span style="color: rgba(0, 128, 128, 1)">22</span>
<span style="color: rgba(0, 128, 128, 1)">23</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> talk() <span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">24</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">miao wu~</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">};
</span><span style="color: rgba(0, 128, 128, 1)">27</span>
<span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 255, 1)">class</span> PetDog : <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> MachinePet {
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">30</span>   PetDog(<span style="color: rgba(0, 0, 255, 1)">const</span> std::<span style="color: rgba(0, 0, 255, 1)">string</span>&amp;<span style="color: rgba(0, 0, 0, 1)"> nickname_) : MachinePet(nickname_) {}
</span><span style="color: rgba(0, 128, 128, 1)">31</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>   std::<span style="color: rgba(0, 0, 255, 1)">string</span> talk() <span style="color: rgba(0, 0, 255, 1)">const</span> <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">33</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">wang wang~</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">35</span> };</pre>
</div>
<p>task4.cpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> #include &lt;iostream&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;memory&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span> #include &lt;vector&gt;
<span style="color: rgba(0, 128, 128, 1)"> 4</span> #include <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">pet.hpp</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test1() {
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   std::vector&lt;MachinePet *&gt;<span style="color: rgba(0, 0, 0, 1)"> pets;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>   pets.push_back(<span style="color: rgba(0, 0, 255, 1)">new</span> PetCat(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">miku</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">10</span>   pets.push_back(<span style="color: rgba(0, 0, 255, 1)">new</span> PetDog(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">da huang</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>   <span style="color: rgba(0, 0, 255, 1)">for</span>(MachinePet *<span style="color: rgba(0, 0, 0, 1)">ptr: pets) {
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         std::cout &lt;&lt; ptr-&gt;get_nickname() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> says </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; ptr-&gt;talk() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         <span style="color: rgba(0, 0, 255, 1)">delete</span> ptr;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 须手动释放资源</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">    }   
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">17</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test2() {
</span><span style="color: rgba(0, 128, 128, 1)">19</span>   std::vector&lt;std::unique_ptr&lt;MachinePet&gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> pets;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>   pets.push_back(std::make_unique&lt;PetCat&gt;(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">miku</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">22</span>   pets.push_back(std::make_unique&lt;PetDog&gt;(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">da huang</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">23</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>   <span style="color: rgba(0, 0, 255, 1)">for</span>(auto <span style="color: rgba(0, 0, 255, 1)">const</span> &amp;<span style="color: rgba(0, 0, 0, 1)">ptr: pets)
</span><span style="color: rgba(0, 128, 128, 1)">25</span>         std::cout &lt;&lt; ptr-&gt;get_nickname() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> says </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; ptr-&gt;talk() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">27</span>
<span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test3() {
</span><span style="color: rgba(0, 128, 128, 1)">29</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> MachinePet pet("little cutie");   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 编译报错:无法定义抽象类对象</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>
<span style="color: rgba(0, 128, 128, 1)">31</span>   <span style="color: rgba(0, 0, 255, 1)">const</span> PetCat cat(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">miku</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">32</span>   std::cout &lt;&lt; cat.get_nickname() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> says </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; cat.talk() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">33</span>
<span style="color: rgba(0, 128, 128, 1)">34</span>   <span style="color: rgba(0, 0, 255, 1)">const</span> PetDog dog(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">da huang</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">35</span>   std::cout &lt;&lt; dog.get_nickname() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> says </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; dog.talk() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">37</span>
<span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> main() {
</span><span style="color: rgba(0, 128, 128, 1)">39</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">测试1: 使用原始指针\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 0, 1)">    test1();
</span><span style="color: rgba(0, 128, 128, 1)">41</span>
<span style="color: rgba(0, 128, 128, 1)">42</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\n测试2: 使用智能指针\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 0, 1)">    test2();
</span><span style="color: rgba(0, 128, 128, 1)">44</span>
<span style="color: rgba(0, 128, 128, 1)">45</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\n测试3: 直接使用类\n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">46</span> <span style="color: rgba(0, 0, 0, 1)">    test3();
</span><span style="color: rgba(0, 128, 128, 1)">47</span> }</pre>
</div>
<p>运行测试截图:</p>
<p><img src="https://img2024.cnblogs.com/blog/3526577/202512/3526577-20251216235125412-2117472521.png"></p>
<p>&nbsp;</p>
<p>实验任务5:</p>
<p>Complex.hpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">#pragma</span> once
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include &lt;iostream&gt;
<span style="color: rgba(0, 128, 128, 1)"> 3</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> template&lt;typename T&gt;
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Complex {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">    T real;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">    T imag;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">11</span>   Complex() : real(<span style="color: rgba(128, 0, 128, 1)">0</span>), imag(<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {}
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">    Complex(T real_, T imag_) : real(real_), imag(imag_) {}
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   Complex(<span style="color: rgba(0, 0, 255, 1)">const</span> Complex &amp;<span style="color: rgba(0, 0, 0, 1)">other) : real(other.real), imag(other.imag) {}
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span>   T get_real() <span style="color: rgba(0, 0, 255, 1)">const</span> { <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> real; }
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   T get_imag() <span style="color: rgba(0, 0, 255, 1)">const</span> { <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> imag; }
</span><span style="color: rgba(0, 128, 128, 1)">17</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>   Complex &amp;<span style="color: rgba(0, 0, 255, 1)">operator</span>+=(<span style="color: rgba(0, 0, 255, 1)">const</span> Complex &amp;<span style="color: rgba(0, 0, 0, 1)">other) {
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         real +=<span style="color: rgba(0, 0, 0, 1)"> other.real;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>         imag +=<span style="color: rgba(0, 0, 0, 1)"> other.imag;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> *<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">23</span>
<span style="color: rgba(0, 128, 128, 1)">24</span>   friend Complex <span style="color: rgba(0, 0, 255, 1)">operator</span>+(<span style="color: rgba(0, 0, 255, 1)">const</span> Complex &amp;c1, <span style="color: rgba(0, 0, 255, 1)">const</span> Complex &amp;<span style="color: rgba(0, 0, 0, 1)">c2) {
</span><span style="color: rgba(0, 128, 128, 1)">25</span>         Complex temp =<span style="color: rgba(0, 0, 0, 1)"> c1;
</span><span style="color: rgba(0, 128, 128, 1)">26</span>         temp +=<span style="color: rgba(0, 0, 0, 1)"> c2;
</span><span style="color: rgba(0, 128, 128, 1)">27</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> temp;
</span><span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">29</span>
<span style="color: rgba(0, 128, 128, 1)">30</span>   friend <span style="color: rgba(0, 0, 255, 1)">bool</span> <span style="color: rgba(0, 0, 255, 1)">operator</span>==(<span style="color: rgba(0, 0, 255, 1)">const</span> Complex &amp;c1, <span style="color: rgba(0, 0, 255, 1)">const</span> Complex &amp;<span style="color: rgba(0, 0, 0, 1)">c2) {
</span><span style="color: rgba(0, 128, 128, 1)">31</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> c1.real == c2.real &amp;&amp; c1.imag ==<span style="color: rgba(0, 0, 0, 1)"> c2.imag;
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">33</span>
<span style="color: rgba(0, 128, 128, 1)">34</span>   friend std::ostream &amp;<span style="color: rgba(0, 0, 255, 1)">operator</span>&lt;&lt;(std::ostream &amp;<span style="color: rgba(0, 0, 255, 1)">out</span>, <span style="color: rgba(0, 0, 255, 1)">const</span> Complex &amp;<span style="color: rgba(0, 0, 0, 1)">c) {
</span><span style="color: rgba(0, 128, 128, 1)">35</span>         <span style="color: rgba(0, 0, 255, 1)">out</span> &lt;&lt;<span style="color: rgba(0, 0, 0, 1)"> c.real;
</span><span style="color: rgba(0, 128, 128, 1)">36</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (c.imag &gt;= <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">37</span>             <span style="color: rgba(0, 0, 255, 1)">out</span> &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">+</span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c.imag &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">i</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">38</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">39</span>             <span style="color: rgba(0, 0, 255, 1)">out</span> &lt;&lt; c.imag &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">i</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">41</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">out</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">42</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">43</span>
<span style="color: rgba(0, 128, 128, 1)">44</span>   friend std::istream &amp;<span style="color: rgba(0, 0, 255, 1)">operator</span>&gt;&gt;(std::istream &amp;<span style="color: rgba(0, 0, 255, 1)">in</span>, Complex &amp;<span style="color: rgba(0, 0, 0, 1)">c) {
</span><span style="color: rgba(0, 128, 128, 1)">45</span>         <span style="color: rgba(0, 0, 255, 1)">in</span> &gt;&gt; c.real &gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> c.imag;
</span><span style="color: rgba(0, 128, 128, 1)">46</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">47</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">48</span>
<span style="color: rgba(0, 128, 128, 1)">49</span> };</pre>
</div>
<p>task5.cpp</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> #include &lt;iostream&gt;
<span style="color: rgba(0, 128, 128, 1)"> 2</span> #include <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Complex.hpp</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test1() {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::cout;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::boolalpha;
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   
<span style="color: rgba(0, 128, 128, 1)"> 8</span>   Complex&lt;<span style="color: rgba(0, 0, 255, 1)">int</span>&gt; c1(<span style="color: rgba(128, 0, 128, 1)">2</span>, -<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">), c2(c1);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">c1 = </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c1 &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">11</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">c2 = </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c2 &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">12</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">c1 + c2 = </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c1 + c2 &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   
<span style="color: rgba(0, 128, 128, 1)">14</span>   c1 +=<span style="color: rgba(0, 0, 0, 1)"> c2;
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">c1 = </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c1 &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   cout &lt;&lt; boolalpha &lt;&lt; (c1 == c2) &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">18</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> test2() {
</span><span style="color: rgba(0, 128, 128, 1)">20</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::cin;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>   <span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> std::cout;
</span><span style="color: rgba(0, 128, 128, 1)">22</span>
<span style="color: rgba(0, 128, 128, 1)">23</span>   Complex&lt;<span style="color: rgba(0, 0, 255, 1)">double</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> c1, c2;
</span><span style="color: rgba(0, 128, 128, 1)">24</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Enter c1 and c2: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">25</span>   cin &gt;&gt; c1 &gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> c2;
</span><span style="color: rgba(0, 128, 128, 1)">26</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">c1 = </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c1 &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">27</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">c2 = </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c2 &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">28</span>
<span style="color: rgba(0, 128, 128, 1)">29</span>   <span style="color: rgba(0, 0, 255, 1)">const</span> Complex&lt;<span style="color: rgba(0, 0, 255, 1)">double</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> c3(c1);
</span><span style="color: rgba(0, 128, 128, 1)">30</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">c3.real = </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c3.get_real() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">31</span>   cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">c3.imag = </span><span style="color: rgba(128, 0, 0, 1)">"</span> &lt;&lt; c3.get_imag() &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">33</span>
<span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> main() {
</span><span style="color: rgba(0, 128, 128, 1)">35</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">自定义类模板Complex测试1: \n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)">    test1();
</span><span style="color: rgba(0, 128, 128, 1)">37</span>
<span style="color: rgba(0, 128, 128, 1)">38</span>   std::cout &lt;&lt; <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">\n自定义类模板Complex测试2: \n</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 0, 1)">    test2();
</span><span style="color: rgba(0, 128, 128, 1)">40</span> }</pre>
</div>
<p>运行测试截图:</p>
<p><img src="https://img2024.cnblogs.com/blog/3526577/202512/3526577-20251216235235953-1706928464.png"></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/chenya17/p/19335061
頁: [1]
查看完整版本: 实验5