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

📄 subject_65998.htm

📁 vc
💻 HTM
字号:
<p>
序号:65998 发表者:ljl 发表日期:2003-12-21 19:55:04
<br>主题:c++ primer的例子,析构出错,找不到原因了,请教!
<br>内容://IntArray.h<BR><BR>#include &lt;iostream&gt;<BR>#include &lt;string&gt;<BR>#include&lt;cassert&gt;<BR>using namespace std;<BR><BR>#ifndef INTARRAY_H<BR>#define INTARRAY_H<BR><BR>class IntArray<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;//构造函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;explicit IntArray(int sz = DefaultArraySize );<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArray( int* array, int array_size );&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArray( const IntArray &amp;rhs );<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//虚拟析构函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~IntArray() <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; *ia &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[] ia;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//equality and inequality operations<BR>&nbsp;&nbsp;&nbsp;&nbsp;bool operator==( const IntArray&amp; ) const;<BR>&nbsp;&nbsp;&nbsp;&nbsp;bool operator!=( const IntArray&amp; ) const;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArray&amp; operator=( const IntArray&amp; );<BR>&nbsp;&nbsp;&nbsp;&nbsp;int size() const { return _size; }<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//去掉了索引检查功能...<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int&amp; operator[]( int index ) { return ia[index];}<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void sort(){}<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int min() const { return 0; } <BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int max() const { return 0; } <BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int find( int value ) const{return 0;}<BR><BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;//参见13.5节的说明<BR>&nbsp;&nbsp;&nbsp;&nbsp;static int const&nbsp;&nbsp;DefaultArraySize;<BR>&nbsp;&nbsp;&nbsp;&nbsp;void init( int sz, int * array );<BR>&nbsp;&nbsp;&nbsp;&nbsp;int _size;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int *ia;<BR>};<BR><BR>int const DefaultArraySize = 0; //vc中必须在类外部初始化;dev-c中则不必<BR><BR>#endif<BR><BR>/////////////////////////////////////////////////////<BR>//IntArray.cpp<BR>#include &lt;iostream&gt;<BR>#include &lt;cassert&gt;<BR>using namespace std;<BR><BR>#include &#34;IntArray.h&#34;<BR><BR>void swap( IntArray &amp;ia, int i, int j )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int tmp = ia[ i ];<BR>&nbsp;&nbsp;&nbsp;&nbsp;ia[ i ] = ia[ j ];<BR>&nbsp;&nbsp;&nbsp;&nbsp;ia[ j ] = tmp;<BR>}<BR><BR>IntArray::IntArray( int sz )<BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;init( sz, 0 );<BR>}<BR><BR>IntArray::IntArray( int *array, int sz )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;init( sz, array );<BR>}<BR><BR>IntArray::IntArray( const IntArray &amp;rhs )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;init( rhs._size, rhs.ia );<BR>}<BR><BR>//page30<BR>void IntArray::init( int sz, int *array )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;_size = sz;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ia = new int[ _size ];<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;for(int ix = 0; ix &lt; _size ; ++ix )<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( !array )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ia[ ix ] = 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ia[ ix ] = array[ ix ];<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>///////////////////////////////////////////////////////////////<BR><BR>//IntArrayMain.cpp<BR>#include &lt;iostream&gt;<BR>#include &#34;IntArray.h&#34;<BR>#include &#34;IntArrayRC.h&#34;<BR><BR>using namespace std;<BR>extern void swap(IntArray&amp;, int ,int );<BR>int main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int array[4] = { 2, 1, 2, 3 };<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArray ia1(array, 4);<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArray ia2(array, 4);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &#34;swap() with IntArray ial\n&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;swap( ia1, 1, ia1.size() );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &#34;swap() with IntArrayRC ia2\n&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;swap( ia2, 1, ia2.size() );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;system(&#34;pause&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>}<BR><BR>////////////////////////////////////////////////////////////////<BR>//IntArrayRC.cpp<BR>#include &#34;IntArrayRC.h&#34;<BR>#include &lt;cassert&gt;<BR>using namespace std;<BR><BR>inline int&amp; IntArrayRC::operator []( int index )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;check_range( index );<BR>&nbsp;&nbsp;&nbsp;&nbsp;return ia[ index ];<BR>}<BR><BR>inline void IntArrayRC::check_range ( int index )<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;assert( index &gt;= 0 &amp;&amp; index &lt; _size );<BR>}<BR><BR>inline&nbsp;&nbsp;&nbsp;&nbsp; IntArrayRC::IntArrayRC( int sz )<BR>:IntArray( sz ) {}<BR><BR>//书上第一个参数是const int* iar,运行出错,如下可以运行,但析构的时候出错<BR>//inline IntArrayRC::IntArrayRC( const int* iar, int sz ) <BR>inline IntArrayRC::IntArrayRC( int* iar, int sz )&nbsp;&nbsp;<BR>: IntArray( iar, sz ) {}<BR><BR>//////////////////////////////////////////////////////////////////<BR>//IntArrayRC.h<BR>#include &#34;IntArray.h&#34;<BR><BR>#ifndef IntArrayRC_H<BR>#define IntArrayRC_H<BR><BR>class IntArrayRC : public IntArray<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArrayRC( int sz = DefaultArraySize );<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArrayRC( int* array, int array_size );&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArrayRC( const int* iar, int sz );<BR>&nbsp;&nbsp;&nbsp;&nbsp;IntArrayRC( const IntArrayRC &amp;rhs );<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int&amp; operator[]( int );<BR>private:<BR>&nbsp;&nbsp;&nbsp;&nbsp;void check_range( int );<BR>};<BR><BR>#endif<BR><BR>2003-12-21 21:16:46

⌨️ 快捷键说明

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