﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-bxybao</title><link>http://www.cppblog.com/bxybao/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 20:26:45 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 20:26:45 GMT</pubDate><ttl>60</ttl><item><title>基类与派生类对象之间的转换&amp;拷贝构造&amp;虚析构&amp;赋值操作符</title><link>http://www.cppblog.com/bxybao/archive/2011/03/31/143154.html</link><dc:creator>包西元</dc:creator><author>包西元</author><pubDate>Thu, 31 Mar 2011 13:07:00 GMT</pubDate><guid>http://www.cppblog.com/bxybao/archive/2011/03/31/143154.html</guid><wfw:comment>http://www.cppblog.com/bxybao/comments/143154.html</wfw:comment><comments>http://www.cppblog.com/bxybao/archive/2011/03/31/143154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/bxybao/comments/commentRss/143154.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/bxybao/services/trackbacks/143154.html</trackback:ping><description><![CDATA[<p>#include &lt;iostream&gt;<br>#include &lt;string&gt;<br>using namespace std;<br>class Item_base<br>{<br>private:<br>&nbsp;string isbn;<br>protected:<br>&nbsp;double price;<br>public:<br>&nbsp;//构造函数<br>&nbsp;Item_base(const string &amp;book = "",double sales_price = 0.0):isbn(book),price(sales_price)<br>&nbsp;{<br>&nbsp;&nbsp;cout&lt;&lt;"基类的构造函数"&lt;&lt;endl;<br>&nbsp;}<br>&nbsp;string book() const<br>&nbsp;{<br>&nbsp;&nbsp;return isbn;<br>&nbsp;}<br>&nbsp;//虚函数<br>&nbsp;virtual double net_price(size_t n) const<br>&nbsp;{<br>&nbsp;&nbsp;return n*price;<br>&nbsp;}<br>&nbsp;//复制构造函数<br>&nbsp;Item_base(const Item_base&amp; ib):isbn(ib.isbn),price(ib.price)<br>&nbsp;{<br>&nbsp;&nbsp;cout&lt;&lt;"基类的复制构造函数"&lt;&lt;endl;<br>&nbsp;}<br>&nbsp;//赋值操作符重载<br>&nbsp;Item_base&amp; operator = (const Item_base&amp; rhs)<br>&nbsp;{<br>&nbsp;&nbsp;isbn = rhs.isbn;<br>&nbsp;&nbsp;price = rhs.price;<br>&nbsp;&nbsp;cout&lt;&lt;"基类的赋值操作符重载"&lt;&lt;endl;<br>&nbsp;&nbsp;return *this;<br>&nbsp;}<br>&nbsp;//虚析构函数<br>&nbsp;virtual ~Item_base()<br>&nbsp;{<br>&nbsp;&nbsp;cout&lt;&lt;"基类析构函数"&lt;&lt;endl;<br>&nbsp;}</p>
<p>};</p>
<p>class Bulk_item : public Item_base<br>{<br>private:<br>&nbsp;size_t min_qty;<br>&nbsp;double discount;<br>public:<br>&nbsp;//构造函数<br>&nbsp;Bulk_item(const string&amp; book = "",double sales_price = 0.0,size_t qty = 0,double disc_rate = 0.0)<br>&nbsp;&nbsp;:Item_base(book,sales_price),min_qty(qty),discount(disc_rate)<br>&nbsp;{<br>&nbsp;&nbsp;cout&lt;&lt;"派生类构造函数"&lt;&lt;endl;<br>&nbsp;}</p>
<p>&nbsp;double net_price(size_t n) const<br>&nbsp;{<br>&nbsp;&nbsp;if (n &gt;= min_qty)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return n * (1-discount)*price;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;return n * price;<br>&nbsp;&nbsp;}<br>&nbsp;}</p>
<p>&nbsp;//复制构造函数<br>&nbsp;Bulk_item(const Bulk_item&amp; b):Item_base(b),min_qty(b.min_qty),discount(b.discount)<br>&nbsp;{<br>&nbsp;&nbsp;cout&lt;&lt;"派生类复制构造函数"&lt;&lt;endl;<br>&nbsp;}<br>&nbsp;//赋值重载操作符<br>&nbsp;Bulk_item&amp; operator = (const Bulk_item&amp; rhs)<br>&nbsp;{<br>&nbsp;&nbsp;if (this != &amp;rhs)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;Item_base::operator=(rhs);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;min_qty = rhs.min_qty;<br>&nbsp;&nbsp;discount = rhs.discount;<br>&nbsp;&nbsp;cout&lt;&lt;"派生类赋值操作符重载"&lt;&lt;endl;<br>&nbsp;&nbsp;return *this;<br>&nbsp;}<br>&nbsp;//虚析构函数<br>&nbsp;virtual ~Bulk_item()<br>&nbsp;{<br>&nbsp;&nbsp;cout&lt;&lt;"派生类析构函数"&lt;&lt;endl;<br>&nbsp;}</p>
<p>};<br>void fun1(Item_base obj)//形参为Item_base<br>{</p>
<p>}<br>void fun2(Item_base&amp; obj)//形参为Item_base对象的引用<br>{</p>
<p>}<br>Item_base fun3()<br>{<br>&nbsp;Item_base obj;<br>&nbsp;return obj;<br>}</p>
<p>void main()<br>{<br>&nbsp;//调用Item_base的普通构造函数，创建Item_base对象iobj<br>&nbsp;Item_base iobj;<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;fun1(iobj);<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;fun2(iobj);<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;iobj=fun3();<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;Item_base *p = new Item_base;<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;delete p;<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;Bulk_item bobj;<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;fun1(bobj);<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;fun2(bobj);<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;Bulk_item *q = new Bulk_item;<br>&nbsp;cout&lt;&lt;endl;cout&lt;&lt;endl;</p>
<p>&nbsp;delete q;</p>
<p>}</p>
<img src ="http://www.cppblog.com/bxybao/aggbug/143154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/bxybao/" target="_blank">包西元</a> 2011-03-31 21:07 <a href="http://www.cppblog.com/bxybao/archive/2011/03/31/143154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>