📄 http:^^www.xraylith.wisc.edu^~khan^software^stl^stl.newbie.html
字号:
<STRONG>const</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG> typename<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> typename_<STRONG>;</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> Base<STRONG>*</STRONG> clone<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>=</STRONG> 0<STRONG>;</STRONG> <STRONG>virtual</STRONG> <STRONG>void</STRONG> identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>=</STRONG> 0<STRONG>;</STRONG> <STRONG>virtual</STRONG> <STRONG>~</STRONG>Base<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>;</STRONG>public: <STRONG>static</STRONG> <STRONG>int</STRONG> count<STRONG>;</STRONG>protected: Base<STRONG>(</STRONG><STRONG>const</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG> typename<STRONG>)</STRONG><STRONG>;</STRONG> Base<STRONG>(</STRONG><STRONG>const</STRONG> Base<STRONG>&</STRONG> base<STRONG>)</STRONG><STRONG>;</STRONG>private: <STRONG>char</STRONG><STRONG>*</STRONG> typename_<STRONG>;</STRONG><STRONG>}</STRONG><STRONG>;</STRONG>Base::Base<STRONG>(</STRONG><STRONG>const</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG> typename<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>const</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG> tname <STRONG>=</STRONG> <STRONG>(</STRONG>typename<STRONG>)</STRONG> <STRONG>?</STRONG> typename <STRONG>:</STRONG> "<EM>unknown</EM>"<STRONG>;</STRONG> strcpy<STRONG>(</STRONG>typename_ <STRONG>=</STRONG> <STRONG>new</STRONG> <STRONG>char</STRONG><STRONG>[</STRONG>strlen<STRONG>(</STRONG>tname<STRONG>)</STRONG> <STRONG>+</STRONG> 1<STRONG>]</STRONG><STRONG>,</STRONG> tname<STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>++</STRONG>count<STRONG>;</STRONG><STRONG>}</STRONG>Base::Base<STRONG>(</STRONG><STRONG>const</STRONG> Base<STRONG>&</STRONG> base<STRONG>)</STRONG> <STRONG>{</STRONG> strcpy<STRONG>(</STRONG> typename_ <STRONG>=</STRONG> <STRONG>new</STRONG> <STRONG>char</STRONG><STRONG>[</STRONG>strlen<STRONG>(</STRONG>base<STRONG>.</STRONG>typename_<STRONG>)</STRONG> <STRONG>+</STRONG> 1<STRONG>]</STRONG><STRONG>,</STRONG> base<STRONG>.</STRONG>typename_ <STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>++</STRONG>count<STRONG>;</STRONG><STRONG>}</STRONG>Base::~Base<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>delete</STRONG><STRONG>[</STRONG><STRONG>]</STRONG> typename_<STRONG>;</STRONG> <STRONG>--</STRONG>count<STRONG>;</STRONG><STRONG>}</STRONG><EM><STRONG>//</STRONG></EM><EM><STRONG>//</STRONG> First derived class. </EM><EM><STRONG>//</STRONG></EM><STRONG>class</STRONG> Derived1 <STRONG>:</STRONG> <STRONG>public</STRONG> Base <STRONG>{</STRONG>public: Derived1<STRONG>(</STRONG><STRONG>int</STRONG> data<STRONG>)</STRONG> <STRONG>:</STRONG> Base<STRONG>(</STRONG>"<EM>derived1</EM>"<STRONG>)</STRONG><STRONG>,</STRONG> data_<STRONG>(</STRONG>data<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> Derived1<STRONG>(</STRONG><STRONG>const</STRONG> Derived1<STRONG>&</STRONG> d<STRONG>)</STRONG> <STRONG>:</STRONG> Base<STRONG>(</STRONG>"<EM>derived1</EM>"<STRONG>)</STRONG><STRONG>,</STRONG> data_<STRONG>(</STRONG>d<STRONG>.</STRONG>data<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> <STRONG>~</STRONG>Derived1<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> Base<STRONG>*</STRONG> clone<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> <STRONG>new</STRONG> Derived1<STRONG>(</STRONG><STRONG>*</STRONG><STRONG>this</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> <STRONG>void</STRONG> identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG><STRONG>;</STRONG> <STRONG>int</STRONG> data<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> data_<STRONG>;</STRONG> <STRONG>}</STRONG>private: <STRONG>int</STRONG> data_<STRONG>;</STRONG><STRONG>}</STRONG><STRONG>;</STRONG><STRONG>virtual</STRONG> <STRONG>void</STRONG> Derived1::identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> os <STRONG><<</STRONG> "<EM>(</EM>" <STRONG><<</STRONG> typename<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG><<</STRONG> "<EM> </EM>" <STRONG><<</STRONG> data<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG><<</STRONG> "<EM>)</EM>"<STRONG>;</STRONG><STRONG>}</STRONG><EM><STRONG>//</STRONG></EM><EM><STRONG>//</STRONG> Second derived class. </EM><EM><STRONG>//</STRONG></EM><STRONG>class</STRONG> Derived2 <STRONG>:</STRONG> <STRONG>public</STRONG> Base <STRONG>{</STRONG>public: Derived2<STRONG>(</STRONG><STRONG>int</STRONG> data<STRONG>)</STRONG> <STRONG>:</STRONG> Base<STRONG>(</STRONG>"<EM>derived2</EM>"<STRONG>)</STRONG><STRONG>,</STRONG> data_<STRONG>(</STRONG>data<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> Derived2<STRONG>(</STRONG><STRONG>const</STRONG> Derived2<STRONG>&</STRONG> d<STRONG>)</STRONG> <STRONG>:</STRONG> Base<STRONG>(</STRONG>"<EM>derived2</EM>"<STRONG>)</STRONG><STRONG>,</STRONG> data_<STRONG>(</STRONG>d<STRONG>.</STRONG>data<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> <STRONG>~</STRONG>Derived2<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> Base<STRONG>*</STRONG> clone<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> <STRONG>new</STRONG> Derived2<STRONG>(</STRONG><STRONG>*</STRONG><STRONG>this</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> <STRONG>void</STRONG> identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG><STRONG>;</STRONG> <STRONG>int</STRONG> data<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> data_<STRONG>;</STRONG> <STRONG>}</STRONG>private: <STRONG>int</STRONG> data_<STRONG>;</STRONG><STRONG>}</STRONG><STRONG>;</STRONG><STRONG>virtual</STRONG> <STRONG>void</STRONG> Derived2::identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> os <STRONG><<</STRONG> "<EM>(</EM>" <STRONG><<</STRONG> typename<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG><<</STRONG> "<EM> </EM>" <STRONG><<</STRONG> data<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG><<</STRONG> "<EM>)</EM>"<STRONG>;</STRONG><STRONG>}</STRONG><EM><STRONG>//</STRONG></EM><EM><STRONG>//</STRONG> now define the pointer wrapper.</EM><EM><STRONG>//</STRONG></EM><STRONG>class</STRONG> BaseWrapper <STRONG>{</STRONG>public: BaseWrapper<STRONG>(</STRONG>Base<STRONG>*</STRONG> base_ptr <STRONG>=</STRONG> 0<STRONG>)</STRONG> <STRONG>:</STRONG> base_ptr_<STRONG>(</STRONG>base_ptr<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> BaseWrapper<STRONG>(</STRONG><STRONG>const</STRONG> BaseWrapper<STRONG>&</STRONG> bw<STRONG>)</STRONG> <STRONG>{</STRONG> base_ptr_ <STRONG>=</STRONG> bw<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>?</STRONG> bw<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>-></STRONG>clone<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>:</STRONG> 0<STRONG>;</STRONG> <STRONG>}</STRONG> <STRONG>~</STRONG>BaseWrapper<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>delete</STRONG> base_ptr_<STRONG>;</STRONG> <STRONG>}</STRONG> <STRONG>const</STRONG> Base<STRONG>*</STRONG> <STRONG>operator</STRONG><STRONG>(</STRONG><STRONG>)</STRONG><STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> base_ptr_<STRONG>;</STRONG> <STRONG>}</STRONG> Base<STRONG>*</STRONG> <STRONG>operator</STRONG><STRONG>(</STRONG><STRONG>)</STRONG><STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> base_ptr_<STRONG>;</STRONG> <STRONG>}</STRONG> BaseWrapper<STRONG>&</STRONG> <STRONG>operator</STRONG><STRONG>=</STRONG> <STRONG>(</STRONG><STRONG>const</STRONG> BaseWrapper<STRONG>&</STRONG> bw<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>delete</STRONG> base_ptr_<STRONG>;</STRONG> base_ptr_ <STRONG>=</STRONG> bw<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>-></STRONG>clone<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>}</STRONG>private: Base<STRONG>*</STRONG> base_ptr_<STRONG>;</STRONG><STRONG>}</STRONG><STRONG>;</STRONG>bool <STRONG>operator</STRONG><STRONG>==</STRONG> <STRONG>(</STRONG><STRONG>const</STRONG> BaseWrapper<STRONG>&</STRONG> bw1<STRONG>,</STRONG> <STRONG>const</STRONG> BaseWrapper<STRONG>&</STRONG> w2<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> false<STRONG>;</STRONG><STRONG>}</STRONG>bool <STRONG>operator</STRONG><STRONG><</STRONG> <STRONG>(</STRONG><STRONG>const</STRONG> BaseWrapper<STRONG>&</STRONG> bw1<STRONG>,</STRONG> <STRONG>const</STRONG> BaseWrapper<STRONG>&</STRONG> w2<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> false<STRONG>;</STRONG><STRONG>}</STRONG><EM><STRONG>//</STRONG></EM><EM><STRONG>//</STRONG> end of class defs.</EM><EM><STRONG>//</STRONG></EM><EM><STRONG>//</STRONG> define static members.</EM><STRONG>int</STRONG> Base::count <STRONG>=</STRONG> 0<STRONG>;</STRONG><STRONG>int</STRONG> main<STRONG>(</STRONG><STRONG>int</STRONG><STRONG>,</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG><STRONG>[</STRONG><STRONG>]</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> list<STRONG><</STRONG>BaseWrapper<STRONG>></STRONG> list1<STRONG>;</STRONG> list1<STRONG>.</STRONG>push_back<STRONG>(</STRONG>BaseWrapper<STRONG>(</STRONG><STRONG>new</STRONG> Derived1<STRONG>(</STRONG>101<STRONG>)</STRONG><STRONG>)</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> list1<STRONG>.</STRONG>push_back<STRONG>(</STRONG>BaseWrapper<STRONG>(</STRONG><STRONG>new</STRONG> Derived2<STRONG>(</STRONG>201<STRONG>)</STRONG><STRONG>)</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> list1<STRONG>.</STRONG>push_back<STRONG>(</STRONG>BaseWrapper<STRONG>(</STRONG><STRONG>new</STRONG> Derived2<STRONG>(</STRONG>202<STRONG>)</STRONG><STRONG>)</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> list1<STRONG>.</STRONG>push_back<STRONG>(</STRONG>BaseWrapper<STRONG>(</STRONG><STRONG>new</STRONG> Derived1<STRONG>(</STRONG>102<STRONG>)</STRONG><STRONG>)</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> list1<STRONG>.</STRONG>push_back<STRONG>(</STRONG>BaseWrapper<STRONG>(</STRONG><STRONG>new</STRONG> Derived2<STRONG>(</STRONG>203<STRONG>)</STRONG><STRONG>)</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> list<STRONG><</STRONG>BaseWrapper<STRONG>></STRONG><STRONG>::</STRONG>const_iterator it <STRONG>=</STRONG> list1<STRONG>.</STRONG>begin<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>for</STRONG><STRONG>(</STRONG><STRONG>;</STRONG> it <STRONG>!=</STRONG> list1<STRONG>.</STRONG>end<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>++</STRONG>it<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>const</STRONG> BaseWrapper<STRONG>&</STRONG> bw <STRONG>=</STRONG> <STRONG>*</STRONG>it<STRONG>;</STRONG> bw<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>-></STRONG>identify<STRONG>(</STRONG>cerr<STRONG>)</STRONG><STRONG>;</STRONG> cerr <STRONG><<</STRONG> "<EM> </EM>"<STRONG>;</STRONG> <STRONG>}</STRONG> cerr <STRONG><<</STRONG> endl <STRONG><<</STRONG> endl<STRONG>;</STRONG> <STRONG>return</STRONG> 0<STRONG>;</STRONG><STRONG>}</STRONG></PRE><hr>And here's the output:<p><hr><pre>(derived1 101) (derived2 201) (derived2 202) (derived1 102) (derived2 203) </pre><hr><hr><!WA82><!WA82><!WA82><!WA82><!WA82><!WA82><a href=#pointers>Pointers and STL</a> <br><!WA83><!WA83><!WA83><!WA83><!WA83><!WA83><a href=#index>Back to index</a><hr><a name=pointer_deriv_template><h3> Templated pointer wrapper that takes a pointer to the base class</h3></a>The following example shows 2 classes derived from <tt>Base</tt>, <tt>derived1</tt> and <tt>derived2</tt> and a templated wrapper<tt>Wrapper<T></tt>. The wrapper class <b>assumes</b> that the base class provides a virtual <tt>clone</tt> facility and does the memorymanagement.<p><em>Note: After the new'd Base derivative is passed to the wrapper, it owns it and deletes it in the destructor</em>.<p><hr><PRE><STRONG>#include</STRONG> <<!WA84><!WA84><!WA84><!WA84><!WA84><!WA84><A HREF="#stl.h">stl.h</A>><STRONG>#include</STRONG> <string.h><STRONG>#include</STRONG> <iostream.h><EM><STRONG>//</STRONG></EM><EM><STRONG>//</STRONG> abstract base class</EM><EM><STRONG>//</STRONG></EM><STRONG>class</STRONG> Base <STRONG>{</STRONG>public: <STRONG>const</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG> typename<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> typename_<STRONG>;</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> Base<STRONG>*</STRONG> clone<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>=</STRONG> 0<STRONG>;</STRONG> <STRONG>virtual</STRONG> <STRONG>void</STRONG> identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>=</STRONG> 0<STRONG>;</STRONG> <STRONG>virtual</STRONG> <STRONG>~</STRONG>Base<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>;</STRONG>public: <STRONG>static</STRONG> <STRONG>int</STRONG> count<STRONG>;</STRONG>protected: Base<STRONG>(</STRONG><STRONG>const</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG> typename<STRONG>)</STRONG><STRONG>;</STRONG> Base<STRONG>(</STRONG><STRONG>const</STRONG> Base<STRONG>&</STRONG> base<STRONG>)</STRONG><STRONG>;</STRONG>private: <STRONG>char</STRONG><STRONG>*</STRONG> typename_<STRONG>;</STRONG><STRONG>}</STRONG><STRONG>;</STRONG>Base::Base<STRONG>(</STRONG><STRONG>const</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG> typename<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>const</STRONG> <STRONG>char</STRONG><STRONG>*</STRONG> tname <STRONG>=</STRONG> <STRONG>(</STRONG>typename<STRONG>)</STRONG> <STRONG>?</STRONG> typename <STRONG>:</STRONG> "<EM>unknown</EM>"<STRONG>;</STRONG> strcpy<STRONG>(</STRONG>typename_ <STRONG>=</STRONG> <STRONG>new</STRONG> <STRONG>char</STRONG><STRONG>[</STRONG>strlen<STRONG>(</STRONG>tname<STRONG>)</STRONG> <STRONG>+</STRONG> 1<STRONG>]</STRONG><STRONG>,</STRONG> tname<STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>++</STRONG>count<STRONG>;</STRONG><STRONG>}</STRONG>Base::Base<STRONG>(</STRONG><STRONG>const</STRONG> Base<STRONG>&</STRONG> base<STRONG>)</STRONG> <STRONG>{</STRONG> strcpy<STRONG>(</STRONG> typename_ <STRONG>=</STRONG> <STRONG>new</STRONG> <STRONG>char</STRONG><STRONG>[</STRONG>strlen<STRONG>(</STRONG>base<STRONG>.</STRONG>typename_<STRONG>)</STRONG> <STRONG>+</STRONG> 1<STRONG>]</STRONG><STRONG>,</STRONG> base<STRONG>.</STRONG>typename_ <STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>++</STRONG>count<STRONG>;</STRONG><STRONG>}</STRONG>Base::~Base<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>delete</STRONG><STRONG>[</STRONG><STRONG>]</STRONG> typename_<STRONG>;</STRONG> <STRONG>--</STRONG>count<STRONG>;</STRONG><STRONG>}</STRONG><EM><STRONG>//</STRONG></EM><EM><STRONG>//</STRONG> First derived class. </EM><EM><STRONG>//</STRONG></EM><STRONG>class</STRONG> Derived1 <STRONG>:</STRONG> <STRONG>public</STRONG> Base <STRONG>{</STRONG>public: Derived1<STRONG>(</STRONG><STRONG>int</STRONG> data<STRONG>)</STRONG> <STRONG>:</STRONG> Base<STRONG>(</STRONG>"<EM>derived1</EM>"<STRONG>)</STRONG><STRONG>,</STRONG> data_<STRONG>(</STRONG>data<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> Derived1<STRONG>(</STRONG><STRONG>const</STRONG> Derived1<STRONG>&</STRONG> d<STRONG>)</STRONG> <STRONG>:</STRONG> Base<STRONG>(</STRONG>"<EM>derived1</EM>"<STRONG>)</STRONG><STRONG>,</STRONG> data_<STRONG>(</STRONG>d<STRONG>.</STRONG>data<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> <STRONG>~</STRONG>Derived1<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> Base<STRONG>*</STRONG> clone<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> <STRONG>new</STRONG> Derived1<STRONG>(</STRONG><STRONG>*</STRONG><STRONG>this</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> <STRONG>void</STRONG> identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG><STRONG>;</STRONG> <STRONG>int</STRONG> data<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> data_<STRONG>;</STRONG> <STRONG>}</STRONG>private: <STRONG>int</STRONG> data_<STRONG>;</STRONG><STRONG>}</STRONG><STRONG>;</STRONG><STRONG>virtual</STRONG> <STRONG>void</STRONG> Derived1::identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> os <STRONG><<</STRONG> "<EM>(</EM>" <STRONG><<</STRONG> typename<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG><<</STRONG> "<EM> </EM>" <STRONG><<</STRONG> data<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG><<</STRONG> "<EM>)</EM>"<STRONG>;</STRONG><STRONG>}</STRONG><EM><STRONG>//</STRONG></EM><EM><STRONG>//</STRONG> Second derived class. </EM><EM><STRONG>//</STRONG></EM><STRONG>class</STRONG> Derived2 <STRONG>:</STRONG> <STRONG>public</STRONG> Base <STRONG>{</STRONG>public: Derived2<STRONG>(</STRONG><STRONG>int</STRONG> data<STRONG>)</STRONG> <STRONG>:</STRONG> Base<STRONG>(</STRONG>"<EM>derived2</EM>"<STRONG>)</STRONG><STRONG>,</STRONG> data_<STRONG>(</STRONG>data<STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> Derived2<STRONG>(</STRONG><STRONG>const</STRONG> Derived2<STRONG>&</STRONG> d<STRONG>)</STRONG> <STRONG>:</STRONG> Base<STRONG>(</STRONG>"<EM>derived2</EM>"<STRONG>)</STRONG><STRONG>,</STRONG> data_<STRONG>(</STRONG>d<STRONG>.</STRONG>data<STRONG>(</STRONG><STRONG>)</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> <STRONG>~</STRONG>Derived2<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>{</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> Base<STRONG>*</STRONG> clone<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> <STRONG>new</STRONG> Derived2<STRONG>(</STRONG><STRONG>*</STRONG><STRONG>this</STRONG><STRONG>)</STRONG><STRONG>;</STRONG> <STRONG>}</STRONG> <STRONG>virtual</STRONG> <STRONG>void</STRONG> identify<STRONG>(</STRONG>ostream<STRONG>&</STRONG> os<STRONG>)</STRONG> <STRONG>const</STRONG><STRONG>;</STRONG> <STRONG>int</STRONG> data<STRONG>(</STRONG><STRONG>)</STRONG> <STRONG>const</STRONG> <STRONG>{</STRONG> <STRONG>return</STRONG> data_<STRONG>;</STRONG> <STRONG>}</STRONG>private: <STRONG>int</STRONG> data_<STRONG>;</STRONG><STRONG>}</STRONG><STRONG>;</STRONG><STRONG>virtual</STRONG> <STRONG>void</STRONG> Derived2::identify<STRONG>(</STRONG>ostream<STR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -