<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1669628720909604414</id><updated>2011-11-27T16:30:28.556-08:00</updated><category term='C++'/><category term='Overloading'/><category term='Constructor'/><category term='FAQ&apos;s'/><category term='C++ Articles'/><category term='Polymorphism'/><category term='Overriding'/><category term='Interviews'/><category term='Structure'/><category term='String'/><category term='Virtual base class'/><category term='Encapsulation'/><category term='Inheritance'/><category term='Inline'/><category term='Templates'/><category term='Namespaces'/><category term='Class'/><title type='text'>C++ Interview Questions and Answers - FAQ</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-3262619075820251864</id><published>2009-09-07T02:57:00.000-07:00</published><updated>2009-09-07T03:20:31.534-07:00</updated><title type='text'>Is it possible to have Virtual Constructor? If yes, how? If not, Why not possible?</title><content type='html'>A: There is nothing like Virtual Constructor. The Constructor can’t be virtual as the constructor is a code which is responsible for creating an instance of a class and it can’t be delegated to any other object by virtual keyword means.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-3262619075820251864?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/3262619075820251864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=3262619075820251864' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/3262619075820251864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/3262619075820251864'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/09/is-it-possible-to-have-virtual.html' title='Is it possible to have Virtual Constructor? If yes, how? If not, Why not possible?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-6575343965299235733</id><published>2009-09-01T20:24:00.000-07:00</published><updated>2009-09-01T20:24:00.866-07:00</updated><title type='text'>What is a friend class/function? Why would you need it?</title><content type='html'>Shortly, friend class or function is a class or a function that declared friend of an other class. The idea behind friend class is to provide the access to the private and protected members or member functions of the friend class. There is a lot of controversial opinions on this topic and you should not usually use friends as it is a hole in your design. One of the examples where it's used is a momento design pattern.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-6575343965299235733?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/6575343965299235733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=6575343965299235733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/6575343965299235733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/6575343965299235733'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/09/what-is-friend-classfunction-why-would.html' title='What is a friend class/function? Why would you need it?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-5678746329988530389</id><published>2009-08-31T20:24:00.000-07:00</published><updated>2009-08-31T20:24:00.583-07:00</updated><title type='text'>In C++ I can declare a reference to a pointer. Can I not also declare a pointer to a reference? Why or How?</title><content type='html'>No, you cannot. It is explicitly stated in C++ spec that pointers to references are prohibited.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-5678746329988530389?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/5678746329988530389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=5678746329988530389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/5678746329988530389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/5678746329988530389'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/in-c-i-can-declare-reference-to-pointer.html' title='In C++ I can declare a reference to a pointer. Can I not also declare a pointer to a reference? Why or How?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-453117101722906827</id><published>2009-08-30T20:24:00.000-07:00</published><updated>2009-08-30T20:24:00.651-07:00</updated><title type='text'>What is a reference?</title><content type='html'>A reference is a quantity that holds the address of an object but behaves syntactically like that object. A reference cannot exist without object and must be initialized.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-453117101722906827?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/453117101722906827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=453117101722906827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/453117101722906827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/453117101722906827'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-reference.html' title='What is a reference?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-4516435549327814552</id><published>2009-08-29T20:24:00.000-07:00</published><updated>2009-08-29T20:24:00.235-07:00</updated><title type='text'>In C++, how do I force derived classes to implement a virtual method from the base class?"</title><content type='html'>Use pure virtual function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-4516435549327814552?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/4516435549327814552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=4516435549327814552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4516435549327814552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4516435549327814552'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/in-c-how-do-i-force-derived-classes-to.html' title='In C++, how do I force derived classes to implement a virtual method from the base class?&quot;'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-8845007099602662254</id><published>2009-08-28T20:23:00.000-07:00</published><updated>2009-08-28T20:23:00.632-07:00</updated><title type='text'>What is a pure virtual method (function)? What is the syntax for a pure virtual method? What is an abstract class?</title><content type='html'>Pure virtual function is a function that declared with "=0;" specifier. Pure virtual function does not have body and must be overridden in the derived class. The syntax for pure virtual function is virtual void foo() = 0; Abstract class is a class with at least one pure virtual function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-8845007099602662254?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/8845007099602662254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=8845007099602662254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/8845007099602662254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/8845007099602662254'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-pure-virtual-method-function.html' title='What is a pure virtual method (function)? What is the syntax for a pure virtual method? What is an abstract class?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-2066723405777807466</id><published>2009-08-27T20:23:00.000-07:00</published><updated>2009-08-27T20:23:00.711-07:00</updated><title type='text'>What is a singleton? Write a simple implementation of a singleton.</title><content type='html'>Singleton is a class that can have only one instance. For singleton example, see Singleton pattern in "Design Patterns" of E.Gamma, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-2066723405777807466?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/2066723405777807466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=2066723405777807466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/2066723405777807466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/2066723405777807466'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-singleton-write-simple.html' title='What is a singleton? Write a simple implementation of a singleton.'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-3994367595231749143</id><published>2009-08-26T20:22:00.000-07:00</published><updated>2009-08-26T20:22:00.367-07:00</updated><title type='text'>Write a simple referenced-counted smart pointer class.</title><content type='html'>This question, in fact, is quite simple. I will not give you an example here, but look at auto_ptr (STL) and CComPtr (ATL) in order to provide your own implementation of reference-counted smart pointer class. Check also &lt;a href="http://web.ftech.net/~honeyg/articles/smartp.htm"&gt;http://web.ftech.net/~honeyg/articles/smartp.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-3994367595231749143?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/3994367595231749143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=3994367595231749143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/3994367595231749143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/3994367595231749143'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/write-simple-referenced-counted-smart.html' title='Write a simple referenced-counted smart pointer class.'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-6506771003536026923</id><published>2009-08-25T20:22:00.000-07:00</published><updated>2009-08-25T20:22:00.425-07:00</updated><title type='text'>When and why should you avoid a multiple inheritance. What are the good examples of MI usage?</title><content type='html'>You should avoid so called diamond structure where a class derives from several base classes which, in turn, have common base class. Good example of MI is an ATL which is based on the idea of MI.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-6506771003536026923?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/6506771003536026923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=6506771003536026923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/6506771003536026923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/6506771003536026923'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/when-and-why-should-you-avoid-multiple.html' title='When and why should you avoid a multiple inheritance. What are the good examples of MI usage?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-4694957351806569248</id><published>2009-08-24T20:22:00.000-07:00</published><updated>2009-08-24T20:22:00.257-07:00</updated><title type='text'>What books did you read recently?</title><content type='html'>While this question seems to be a silly one, it is easiest to be prepared to. I think it worth to mention Meyers, Gamma, Coplien, Stroustrup, Schildt etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-4694957351806569248?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/4694957351806569248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=4694957351806569248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4694957351806569248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4694957351806569248'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-books-did-you-read-recently.html' title='What books did you read recently?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-5777156966834247552</id><published>2009-08-23T20:21:00.000-07:00</published><updated>2009-08-23T20:21:00.233-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Constructor'/><title type='text'>What is the virtual destructor. When and why do you need it? (Be surprised if you are not asked this question!)</title><content type='html'>Destructor implemented by declaring a base class's destructor with the keyword virtual. A virtual destructor ensures that, when delete is applied to a base class pointer or reference, it calls the destructor implemented in the derived class, if an implementation exists.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-5777156966834247552?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/5777156966834247552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=5777156966834247552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/5777156966834247552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/5777156966834247552'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-virtual-destructor-when-and-why.html' title='What is the virtual destructor. When and why do you need it? (Be surprised if you are not asked this question!)'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-7687618133539964498</id><published>2009-08-22T20:20:00.000-07:00</published><updated>2009-08-22T20:20:00.592-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Namespaces'/><title type='text'>What is the namespace?</title><content type='html'>A namespace allows you to resolve conflict of the global identifiers when you use, for example, two different libraries of different vendors, which use the same names. Of course, if the vendors of libraries also use the same name for the namespace, you cannot resolve the name conflict with namespace feature of C++ !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-7687618133539964498?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/7687618133539964498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=7687618133539964498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/7687618133539964498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/7687618133539964498'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-namespace.html' title='What is the namespace?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-3952256527668506867</id><published>2009-08-21T20:15:00.000-07:00</published><updated>2009-08-21T20:15:00.589-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Structure'/><category scheme='http://www.blogger.com/atom/ns#' term='Class'/><title type='text'>What is the difference between struct and class?</title><content type='html'>There are few differences:&lt;br /&gt;All members of struct are public.&lt;br /&gt;Default inheritance for struct is public, where as for class the default inheritance is private.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-3952256527668506867?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/3952256527668506867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=3952256527668506867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/3952256527668506867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/3952256527668506867'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-difference-between-struct-and.html' title='What is the difference between struct and class?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-7406993505251948997</id><published>2009-08-19T20:12:00.000-07:00</published><updated>2009-08-19T20:12:00.139-07:00</updated><title type='text'>Describe the role of envelope and letter classes.</title><content type='html'>I was actually asked this question at one of my interviews. I guess the single purpose of this question is to paralyze the interviewee. In my case the interviewer has achieved the goal and I am glad I did not pass an interview to that company. The interviewer actually tried to fetch a basic overview of C++ paradigms and design patterns (this envelope/letter paradigm is described in the book of Coplien from 1995) While I do not question the importance of design patterns, all I was talking to agreed that in this form the question demonstrate inability of the interviewer to conduct the interview. You may safely ignore this question if you asked :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-7406993505251948997?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/7406993505251948997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=7406993505251948997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/7406993505251948997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/7406993505251948997'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/describe-role-of-envelope-and-letter.html' title='Describe the role of envelope and letter classes.'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-8830930299587755284</id><published>2009-08-18T20:12:00.000-07:00</published><updated>2009-08-18T20:12:00.462-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Overriding'/><category scheme='http://www.blogger.com/atom/ns#' term='Overloading'/><title type='text'>What is the difference between "overloading" and "overriding"?</title><content type='html'>Overloading is the practice of supplying more than one definition for a given function name in the same scope. The compiler is left to pick the appropriate version of the function or operator based on the arguments with which it is called. Overriding refers to the virtual functions, i.e. functions that ensure that the correct function is called for an object, regardless of the expression used to make the function call. For example, if the same function with virtual attribute is declared in base and derived class, the function from the derived class is invoked for objects of the derived class, even if it is called using a pointer or reference to the base class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-8830930299587755284?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/8830930299587755284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=8830930299587755284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/8830930299587755284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/8830930299587755284'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-difference-between-overloading.html' title='What is the difference between &quot;overloading&quot; and &quot;overriding&quot;?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-2176084601163028360</id><published>2009-08-17T20:08:00.000-07:00</published><updated>2009-08-17T20:08:00.725-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virtual base class'/><title type='text'>Why do you need a virtual base class?</title><content type='html'>Virtual base classes offer a way to save space and avoid ambiguities in class hierarchies that use multiple inheritance. Each nonvirtual object contains a copy of the data members defined in the base class. When a base class is specified as a virtual base, it can act as an indirect base more than once without duplication of its data members. A single copy of its data members is shared by all the base classes that use it as a virtual base.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-2176084601163028360?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/2176084601163028360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=2176084601163028360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/2176084601163028360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/2176084601163028360'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/why-do-you-need-virtual-base-class.html' title='Why do you need a virtual base class?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-3193928496337348672</id><published>2009-08-16T20:10:00.000-07:00</published><updated>2009-08-16T20:10:00.985-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Polymorphism'/><title type='text'>What is polymorphism?</title><content type='html'>An object-oriented programming term. The ability to have methods with the same name, but different content, for related classes. The procedure to use is determined at run time by the class of the object. For example, related objects might both have Draw methods. A procedure, passed such an object as a parameter, can call the Draw method without needing to know what type of object the parameter is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-3193928496337348672?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/3193928496337348672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=3193928496337348672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/3193928496337348672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/3193928496337348672'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-polymorphism.html' title='What is polymorphism?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-217823241736382257</id><published>2009-08-15T20:10:00.000-07:00</published><updated>2009-08-15T20:10:00.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Encapsulation'/><title type='text'>What is the purpose of separating a class implementation from its interface</title><content type='html'>Encapsulation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-217823241736382257?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/217823241736382257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=217823241736382257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/217823241736382257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/217823241736382257'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-purpose-of-separating-class.html' title='What is the purpose of separating a class implementation from its interface'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-839089080611644670</id><published>2009-08-15T20:04:00.000-07:00</published><updated>2009-08-15T20:04:00.129-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Encapsulation'/><title type='text'>What is encapsulation?</title><content type='html'>An object-oriented programming term for the ability to contain and hide information about an object, such as internal data structures and code. Encapsulation isolates the internal complexity of an object's operation from the rest of the application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-839089080611644670?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/839089080611644670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=839089080611644670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/839089080611644670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/839089080611644670'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-encapsulation.html' title='What is encapsulation?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-4250067824170252519</id><published>2009-08-14T20:11:00.000-07:00</published><updated>2009-08-14T20:12:07.912-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inline'/><title type='text'>What is "inline" function?</title><content type='html'>inline keyword before name of the function allows the compiler to insert a copy of the function body into each place the function is called. Therefore, the size of the code is increasing, but speed of execution is also increasing. You should mention that there are circumstances (e.g. recursive functions) when compiler is allowed to ignore inline keyword.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-4250067824170252519?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/4250067824170252519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=4250067824170252519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4250067824170252519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4250067824170252519'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-inline-function.html' title='What is &quot;inline&quot; function?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-898316214367822025</id><published>2009-08-14T20:08:00.000-07:00</published><updated>2009-08-14T20:09:02.796-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inheritance'/><title type='text'>What is inheritance?</title><content type='html'>An object-oriented programming term. The ability of a subclass to take on the characteristics of the class it's based on. If the characteristics of the parent class change, the subclass on which it is based inherits those characteristics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-898316214367822025?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/898316214367822025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=898316214367822025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/898316214367822025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/898316214367822025'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2009/08/what-is-inheritance.html' title='What is inheritance?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-7664660188060551941</id><published>2008-12-12T21:11:00.001-08:00</published><updated>2008-12-23T03:57:26.944-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='String'/><title type='text'>String Manipulation</title><content type='html'>You have been hired as a contract programmer by the Smithfield Natural Gas company.&lt;br /&gt;Your first job is to write a program that prints a form letter to customers with an overdue&lt;br /&gt;account. The letter should have the form shown in Figure . When the letter is printed by&lt;br /&gt;your program, however, the fields shown in brackets will be replaced by actual values.&lt;br /&gt;&lt;br /&gt;Figure&lt;br /&gt;Dear &lt;salutation&gt; &lt;last-name&gt;:&lt;br /&gt;&lt;br /&gt;Our records show that your account has a balance of $&lt;balance&gt; and&lt;br /&gt;a past-due amount of $&lt;past-due&gt;. Your last payment was on &lt;date&gt;.&lt;br /&gt;Since we haven't heard from you in some time, would you please take&lt;br /&gt;a moment to send us a check for the past-due amount? We value your&lt;br /&gt;business and look forward to serving you in the future.&lt;br /&gt;Sincerely,&lt;br /&gt;&lt;br /&gt;The Management P.S. If you've already sent your payment, ignore this reminder.&lt;br /&gt;Inside the letter, the fields listed in Table  are shown in brackets.&lt;br /&gt;&lt;br /&gt;Table&lt;br /&gt;Field Description&lt;br /&gt;Salutation (either Mr. or Ms.)&lt;br /&gt;Salutation&lt;br /&gt;The customer’s last name&lt;br /&gt;Last-Name&lt;br /&gt;The customer’s total account balance&lt;br /&gt;Balance&lt;br /&gt;The amount the account is past due&lt;br /&gt;Past-Due&lt;br /&gt;The date the customer last made a payment&lt;br /&gt;Date&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;Before the letter is printed, your program should ask the user to enter values for the fields&lt;br /&gt;listed in Table . The values should then be inserted into the form letter as it is being&lt;br /&gt;printed. The program should perform word-wrap, which means the sentences should be&lt;br /&gt;adjusted so no word is split between two lines. Additionally, the letter should have -&lt;br /&gt;character left and right margins.&lt;br /&gt;&lt;br /&gt;Variables&lt;br /&gt;Table  lists the major variables needed.&lt;br /&gt;Table&lt;br /&gt;Variable Description&lt;br /&gt;Eight constant global character arrays that hold portions of the form&lt;br /&gt;part...part&lt;br /&gt;letter A character array to hold the salutation&lt;br /&gt;salutation&lt;br /&gt;A character array to hold the customer’s last name&lt;br /&gt;lastName&lt;br /&gt;A character array to hold the date of the last payment&lt;br /&gt;lastPayment&lt;br /&gt;A character array to hold the text representation of the account&lt;br /&gt;balance&lt;br /&gt;balance&lt;br /&gt;A character array to hold the text representation of the past due&lt;br /&gt;pastDue&lt;br /&gt;amount&lt;br /&gt;A character to hold the user’s Y or N response when asked if they wish&lt;br /&gt;again&lt;br /&gt;to print another letter&lt;br /&gt;An integer that holds the printing position. Each time a character is&lt;br /&gt;position&lt;br /&gt;printed, this variable is incremented. It is used to determine when the&lt;br /&gt;end of the line is near&lt;br /&gt;Global Variables&lt;br /&gt;The program uses eight constant global character arrays to hold the sections of the form&lt;br /&gt;letter that are always the same. The arrays, named&lt;br /&gt;through&lt;br /&gt;, are defined and&lt;br /&gt;Part&lt;br /&gt;Part&lt;br /&gt;initialized as follows:&lt;br /&gt;const char part[] = "Dear ";&lt;br /&gt;const char part[] = "Our records show that your account has a"&lt;br /&gt;" balance of $";&lt;br /&gt;const char part[] = " and a past due amount of $";&lt;br /&gt;const char part[] = "Your last payment was on ";&lt;br /&gt;const char part[] = "Since we haven't heard from you in some"&lt;br /&gt;" time, would you please take a moment to send"&lt;br /&gt;" us a check for the past due amount? We value"&lt;br /&gt;" your business and look forward to serving you"&lt;br /&gt;" in the future.\n\n";&lt;br /&gt;const char part[] = "Sincerely,\n";&lt;br /&gt;const char part[] = "The Management\n\n";&lt;br /&gt;const char part[] = "P.S. If you've already sent your payment, ignore"&lt;br /&gt;" this reminder.";&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;NOTE:&lt;br /&gt;Notice that some of the arrays are initialized with what appears to be more than&lt;br /&gt;one string. For instance, look at the initialization of&lt;br /&gt;:&lt;br /&gt;part&lt;br /&gt;const char part[] = "Our records show that your account has a"&lt;br /&gt;" balance of $";&lt;br /&gt;The two strings are actually concatenated into one string. This allows the pogrammer to&lt;br /&gt;easily span multiple lines when initializing character arrays with long strings. The same&lt;br /&gt;technique is used with&lt;br /&gt;and&lt;br /&gt;.&lt;br /&gt;part&lt;br /&gt;part&lt;br /&gt;Modules&lt;br /&gt;The program will consist of the functions listed in Table .&lt;br /&gt;Table&lt;br /&gt;Function Description&lt;br /&gt;The program’s&lt;br /&gt;function. Calls the&lt;br /&gt;and&lt;br /&gt;main&lt;br /&gt;main&lt;br /&gt;getInfo&lt;br /&gt;printLetter&lt;br /&gt;functions.&lt;br /&gt;Calls the&lt;br /&gt;function to get the salutation. Then asks the user to enter&lt;br /&gt;getInfo&lt;br /&gt;getSal&lt;br /&gt;the customer’s last name, account balance, past-due amount, and date of&lt;br /&gt;last payment.&lt;br /&gt;Prints a menu allowing the user to select either Mr. or Ms. as the&lt;br /&gt;getSal&lt;br /&gt;salutation.&lt;br /&gt;Controls the printing of the form letter once the fields have been input by&lt;br /&gt;printLetter&lt;br /&gt;the user. Calls the&lt;br /&gt;function.&lt;br /&gt;printLine&lt;br /&gt;Prints a line of text starting at the current printing position. This function&lt;br /&gt;printLine&lt;br /&gt;performs word-wrap when near the end of the line. It keeps the&lt;br /&gt;position&lt;br /&gt;variable updated as well.&lt;br /&gt;Function&lt;br /&gt;main&lt;br /&gt;Function&lt;br /&gt;contains the array definitions for the salutation, last name, date of last pay-&lt;br /&gt;main&lt;br /&gt;ment, account balance, and past due amount. A&lt;br /&gt;loop calls the&lt;br /&gt;and&lt;br /&gt;do-while&lt;br /&gt;getInfo&lt;br /&gt;functions. The loop repeats as long as the user wishes to print form letters.&lt;br /&gt;printLetter&lt;br /&gt;Here is the pseudocode:&lt;br /&gt;Do&lt;br /&gt;Call getInfo to get the salutation, last name, balance, past-due&lt;br /&gt;amount, and date of last payment from the user.&lt;br /&gt;Call printLetter to print the form letter.&lt;br /&gt;Ask the user if another letter is to be printed.&lt;br /&gt;While the user wants to print another letter.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;Here is the function’s actual C++ code:&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;char salutation[];    // To hold the salutation&lt;br /&gt;char lastName[];     // Customer's last name&lt;br /&gt;char lastPayment[];  // Date of last payment&lt;br /&gt;char balance[];       // Account balance&lt;br /&gt;char pastDue[];       // Amount past due&lt;br /&gt;char again;            // To hold Y or N&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;// Call getInfo to get input from the user&lt;br /&gt;getInfo(salutation, lastName, balance, pastDue,&lt;br /&gt;lastPayment);&lt;br /&gt;cout &lt;&lt; "\n\n";&lt;br /&gt;// Now print the form letter&lt;br /&gt;printLetter(salutation, lastName, balance, pastDue,&lt;br /&gt;lastPayment);&lt;br /&gt;cout &lt;&lt; "\n\nDo another letter? (Y/N) ";&lt;br /&gt;cin &gt;&gt; again;&lt;br /&gt;} while (toupper(again) == 'Y');&lt;br /&gt;return ;&lt;br /&gt;}&lt;br /&gt;Notice that pointers to&lt;br /&gt;,&lt;br /&gt;,&lt;br /&gt;,&lt;br /&gt;, and&lt;br /&gt;salutation&lt;br /&gt;lastName&lt;br /&gt;balance&lt;br /&gt;pastDue&lt;br /&gt;lastPayment&lt;br /&gt;are passed to&lt;br /&gt;and&lt;br /&gt;. When&lt;br /&gt;returns, these fields will have&lt;br /&gt;getInfo&lt;br /&gt;printLetter&lt;br /&gt;getInfo&lt;br /&gt;the values provided by the user stored in them.&lt;br /&gt;will retrieve the values and&lt;br /&gt;printLetter&lt;br /&gt;insert them in the form letter.&lt;br /&gt;The&lt;br /&gt;getInfo&lt;br /&gt;Function&lt;br /&gt;This function first calls the&lt;br /&gt;function (to get the salutation), and then asks the user&lt;br /&gt;getSal&lt;br /&gt;to enter the customer’s last name, account balance, past due amount, and the date of the&lt;br /&gt;last payment. These values are then stored in the arrays whose addresses are passed into&lt;br /&gt;the function as arguments. Here is the pseudocode:&lt;br /&gt;Call getSal.&lt;br /&gt;Ask the user to enter the customer’s last name.&lt;br /&gt;Convert the first character of the last name to upper case.&lt;br /&gt;Ask the user to enter the customer’s account balance.&lt;br /&gt;Ask the user to enter the account’s past due amount.&lt;br /&gt;Ask the user to enter the date of the last payment.&lt;br /&gt;Notice that after the user enters the customer’s last name, the function automatically con-&lt;br /&gt;verts its first character to upper case. This is in case the user entered the name in all lower&lt;br /&gt;case. Here is the function’s C++ code:&lt;br /&gt;void getInfo(char *sal, char *lname, char *bal, char *due,&lt;br /&gt;char *lastPay)&lt;br /&gt;{&lt;br /&gt;getSal(sal);&lt;br /&gt;cout &lt;&lt; "Last name: ";&lt;br /&gt;cin &gt;&gt; lname;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;lname[] = toupper(lname[]);&lt;br /&gt;cout &lt;&lt; "Account balance: ";&lt;br /&gt;cin &gt;&gt; bal;&lt;br /&gt;cout &lt;&lt; "Past due amount: ";&lt;br /&gt;cin &gt;&gt; due;&lt;br /&gt;cout &lt;&lt; "Date of last payment(MM/DD/YYYY): ";&lt;br /&gt;cin &gt;&gt; lastPay;&lt;br /&gt;}&lt;br /&gt;The&lt;br /&gt;getSal&lt;br /&gt;Function&lt;br /&gt;This function displays a menu allowing the user to select a salutation from either Mr. or&lt;br /&gt;Ms. The choice is then stored in the array whose address is passed into the function as an&lt;br /&gt;argument. Here is the pseudocode:&lt;br /&gt;Do&lt;br /&gt;Display menu with choice  being Mr. and choice  being Ms.&lt;br /&gt;Ask user to select a salutation.&lt;br /&gt;While the user does not select  or  from the menu.&lt;br /&gt;If the user selected&lt;br /&gt;The salutation is Mr.&lt;br /&gt;else&lt;br /&gt;The salutation is Ms.&lt;br /&gt;End If.&lt;br /&gt;Here is the function’s C++ code:&lt;br /&gt;void getSal(char *sal)&lt;br /&gt;{&lt;br /&gt;int choice;&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;cout &lt;&lt; "Salutation:\n";&lt;br /&gt;cout &lt;&lt; "\t) Mr.\n";&lt;br /&gt;cout &lt;&lt; "\t) Ms.\n";&lt;br /&gt;cout &lt;&lt; "Select one: ";&lt;br /&gt;cin &gt;&gt; choice;&lt;br /&gt;} while (choice !=  &amp;amp;&amp;amp; choice != );&lt;br /&gt;if (choice == )&lt;br /&gt;strcpy(sal, "Mr.");&lt;br /&gt;else&lt;br /&gt;strcpy(sal, "Ms.");&lt;br /&gt;}&lt;br /&gt;The&lt;br /&gt;printLetter&lt;br /&gt;Function&lt;br /&gt;Once the user has entered values for all the fields, this function controls the printing of the&lt;br /&gt;letter. It has one local variable,&lt;br /&gt;, which is an integer. This variable keeps track of&lt;br /&gt;position&lt;br /&gt;the number of characters printed on the current line. This is crucial information for the&lt;br /&gt;function, which performs word-wrap. Below is the function’s pseudocode. (It&lt;br /&gt;printLine&lt;br /&gt;might help you to refer to the contents of the global arrays&lt;br /&gt;through&lt;br /&gt;as you&lt;br /&gt;Part&lt;br /&gt;Part&lt;br /&gt;read the code.)&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;// First print the salutation part of the letter.&lt;br /&gt;Set the position variable to  (for printLine).&lt;br /&gt;Call printLine to print the part array.&lt;br /&gt;Print the salutation, followed by a space, followed by the&lt;br /&gt;customer’s last name, followed by a colon.&lt;br /&gt;// Next print the body of the letter.&lt;br /&gt;Set the position variable to zero.&lt;br /&gt;Call printLine to print the part array.&lt;br /&gt;Print the customer’s balance.&lt;br /&gt;Adjust the position variable.&lt;br /&gt;Call printLine to print the part array.&lt;br /&gt;Print the past-due amount.&lt;br /&gt;Adjust the position variable.&lt;br /&gt;Call printLine to print the part array.&lt;br /&gt;Print the date of the last payment.&lt;br /&gt;Adjust the position variable.&lt;br /&gt;Call printLine to print the part array.&lt;br /&gt;// Next print the letter’s closing.&lt;br /&gt;Set the position variable to zero (to start a new line.)&lt;br /&gt;Call printLine to print the part array.&lt;br /&gt;Set the position variable to zero (to start a new line).&lt;br /&gt;Call printLine to print the part array.&lt;br /&gt;// Last, print the PS reminder.&lt;br /&gt;Set the position variable to zero (to start a new line).&lt;br /&gt;Call printLine to print the part array.&lt;br /&gt;The&lt;br /&gt;function updates the&lt;br /&gt;variable. When&lt;br /&gt;prints one&lt;br /&gt;printLine&lt;br /&gt;position&lt;br /&gt;PrintLetter&lt;br /&gt;of the fields, such as balance, it must adjust the position variable. This is so the&lt;br /&gt;function will accurately detect the end of each line. Notice that every time a&lt;br /&gt;printLine&lt;br /&gt;new line is to be started,&lt;br /&gt;is reset to zero. Here is the C++ code for the function:&lt;br /&gt;position&lt;br /&gt;void printLetter(char *sal, char *lname, char *bal, char *due,&lt;br /&gt;char *lastPay)&lt;br /&gt;{&lt;br /&gt;int position;&lt;br /&gt;// Print the salutation part of the letter&lt;br /&gt;position = ; // Start a new line&lt;br /&gt;printLine(part, position);&lt;br /&gt;cout &lt;&lt; sal &lt;&lt; " " &lt;&lt; lname &lt;&lt; ":" &lt;&lt; endl &lt;&lt; endl;&lt;br /&gt;// Print the body of the letter&lt;br /&gt;position = ;  // Start a new line.&lt;br /&gt;printLine(part, position);&lt;br /&gt;cout &lt;&lt; bal;   // Print account balance.&lt;br /&gt;// Add length of balance to position.&lt;br /&gt;position += strlen(bal);&lt;br /&gt;printLine(part, position);&lt;br /&gt;cout &lt;&lt; due &lt;&lt; ". "; // Print past due amount&lt;br /&gt;position += strlen(due)+ ;&lt;br /&gt;// Add length of due and the period and space at the&lt;br /&gt;// end of the sentence to position.&lt;br /&gt;printLine(part, position);&lt;br /&gt;cout &lt;&lt; lastPay &lt;&lt; ". "; // Print date of last payment.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;// Now Add length of lastPay and the period and space at the&lt;br /&gt;// end of the sentence to position.&lt;br /&gt;position += strlen(lastPay) + ;&lt;br /&gt;printLine(part, position);&lt;br /&gt;// Print the closing&lt;br /&gt;position = ;  // Start a new line&lt;br /&gt;printLine(part, position);&lt;br /&gt;position = ;  // Start a new line&lt;br /&gt;printLine(part, position);&lt;br /&gt;// Print the PS reminder&lt;br /&gt;position = ;  // Start a new line&lt;br /&gt;printLine(part, position);&lt;br /&gt;}&lt;br /&gt;The printLine Function&lt;br /&gt;This function prints each individual line of the letter. It takes two arguments: the address&lt;br /&gt;of the string that is to be printed on the line, and the variable used to store the number of&lt;br /&gt;characters printed (the&lt;br /&gt;variable). The number of characters printed on the line&lt;br /&gt;position&lt;br /&gt;is important because the program must perform word-wrap. This happens when the word&lt;br /&gt;being printed at the end of a line will not entirely fit. Instead of printing part of the word&lt;br /&gt;on one line and then continuing it on the next line, the program is to start the word on the&lt;br /&gt;next line. Here is the function’s pseudocode:&lt;br /&gt;If the line is at or past the right margin&lt;br /&gt;Start a new line.&lt;br /&gt;End If.&lt;br /&gt;While not at the end of the string&lt;br /&gt;If  or more characters have been printed AND the next&lt;br /&gt;character is a space&lt;br /&gt;Perform word-wrap.&lt;br /&gt;End If.&lt;br /&gt;If at the beginning of a new line&lt;br /&gt;Print the left margin ( spaces).&lt;br /&gt;Add  to the number of characters printed.&lt;br /&gt;End If.&lt;br /&gt;Print the next character.&lt;br /&gt;Add one to the number of characters printed.&lt;br /&gt;End While.&lt;br /&gt;The first&lt;br /&gt;statement simply checks to see if the current printing position is at or beyond&lt;br /&gt;if&lt;br /&gt;the right margin. Because the letter has ten-character margins, any position beyond the&lt;br /&gt;th character is in the right margin.&lt;br /&gt;Inside the&lt;br /&gt;loop another&lt;br /&gt;statement checks to see if  or more characters have&lt;br /&gt;while&lt;br /&gt;if&lt;br /&gt;been printed. This is the part that controls word-wrap. The function begins watching for a&lt;br /&gt;space separating words at the th character. If a break between two words appears any-&lt;br /&gt;where after the th character, a new line is started. The next&lt;br /&gt;statement checks to see&lt;br /&gt;if&lt;br /&gt;a new line has begun. If so, it prints the  spaces that make the left margin. After all&lt;br /&gt;if&lt;br /&gt;this has taken place, the next character is printed and the character count is incremented.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;Here is the C++ code for the function:&lt;br /&gt;void printLine(const char *line, int &amp;amp;startCount)&lt;br /&gt;{&lt;br /&gt;int charCount = ;&lt;br /&gt;if (startCount &gt;= ) // If the line is already at&lt;br /&gt;{ // or past the right margin...&lt;br /&gt;cout &lt;&lt; "\n"; // Start a new line.&lt;br /&gt;startCount = ; // Reset startCount.&lt;br /&gt;}&lt;br /&gt;// The following while loop cycles through the string&lt;br /&gt;// printing it one character at a time. It watches for&lt;br /&gt;// spaces after the th position so word-wrap may be&lt;br /&gt;// performed.&lt;br /&gt;while (line[charCount] != '\')&lt;br /&gt;{&lt;br /&gt;if (startCount &gt;=  &amp;amp;&amp;amp; line[charCount] == ' ')&lt;br /&gt;{&lt;br /&gt;cout &lt;&lt; "          \n"; // Print right margin.&lt;br /&gt;charCount++;  // Skip over the space&lt;br /&gt;startCount = ;&lt;br /&gt;}&lt;br /&gt;if (startCount == )&lt;br /&gt;{&lt;br /&gt;cout &lt;&lt; "          ";    // Print left margin.&lt;br /&gt;startCount = ;&lt;br /&gt;}&lt;br /&gt;cout.put(line[charCount]); // Print the character.&lt;br /&gt;charCount++;    // Update subscript.&lt;br /&gt;startCount++;   // Update position counter.&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;NOTE:&lt;br /&gt;The&lt;br /&gt;parameter is a reference to the&lt;br /&gt;variable in the&lt;br /&gt;startCount&lt;br /&gt;position&lt;br /&gt;function.&lt;br /&gt;printLetter&lt;br /&gt;The Entire Program&lt;br /&gt;Program - shows the entire program’s source code.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;Program -&lt;br /&gt;&lt;br /&gt;// This program prints a simple form letter reminding a customer&lt;br /&gt;&lt;br /&gt;// of an overdue account balance.&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;cctype&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;cstring&gt;&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Function Prototypes&lt;br /&gt;&lt;br /&gt;void printLetter(char *, char *, char *, char *, char *);&lt;br /&gt;&lt;br /&gt;void getInfo(char *, char *, char *, char *, char *);&lt;br /&gt;&lt;br /&gt;void getSal(char *);&lt;br /&gt;&lt;br /&gt;void printline(const char *, int&amp;amp;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Strings that make up the form letter&lt;br /&gt;&lt;br /&gt;const char part[] = "Dear ";&lt;br /&gt;&lt;br /&gt;const char part[] = "Our records show that your account has a"&lt;br /&gt;&lt;br /&gt;" balance of $";&lt;br /&gt;&lt;br /&gt;const char part[] = " and a past due amount of $";&lt;br /&gt;&lt;br /&gt;const char part[] = "Your last payment was on ";&lt;br /&gt;&lt;br /&gt;const char part[] = "Since we haven't heard from you in some"&lt;br /&gt;&lt;br /&gt;" time, would you please take a moment to send"&lt;br /&gt;&lt;br /&gt;" us a check for the past due amount? We value"&lt;br /&gt;&lt;br /&gt;" your business and look forward to serving you"&lt;br /&gt;&lt;br /&gt;" in the future.\n\n";&lt;br /&gt;&lt;br /&gt;const char part[] = "Sincerely,\n";&lt;br /&gt;&lt;br /&gt;const char part[] = "The Management\n\n";&lt;br /&gt;&lt;br /&gt;const char part[] = "P.S. If you've already sent your payment, ignore"&lt;br /&gt;&lt;br /&gt;" this reminder.";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;char salutation[];    // To hold the salutation&lt;br /&gt;&lt;br /&gt;char lastName[];     // Customer's last name&lt;br /&gt;&lt;br /&gt;char lastPayment[];  // Date of last payment&lt;br /&gt;&lt;br /&gt;char balance[];       // Account balance&lt;br /&gt;&lt;br /&gt;char pastDue[];       // Amount past due&lt;br /&gt;&lt;br /&gt;char again;            // To hold Y or N&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;do&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;// Call getInfo to get input from the user&lt;br /&gt;&lt;br /&gt;getInfo(salutation, lastName, balance, pastDue,&lt;br /&gt;&lt;br /&gt;lastPayment);&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "\n\n";&lt;br /&gt;&lt;br /&gt;// Now print the form letter&lt;br /&gt;&lt;br /&gt;printLetter(salutation, lastName, balance, pastDue,&lt;br /&gt;&lt;br /&gt;lastPayment);&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "\n\nDo another letter? (Y/N) ";&lt;br /&gt;&lt;br /&gt;cin &gt;&gt; again;&lt;br /&gt;&lt;br /&gt;} while (toupper(again) == 'Y');&lt;br /&gt;&lt;br /&gt;return ;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;(program continues)&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;Program -&lt;br /&gt;(continued)&lt;br /&gt;&lt;br /&gt;//*****************************************************************&lt;br /&gt;&lt;br /&gt;// Definition of function getInfo.                                *&lt;br /&gt;&lt;br /&gt;// This function allows the user to enter the following items:    *&lt;br /&gt;&lt;br /&gt;// salutation, last name, account balance, past due amount, and   *&lt;br /&gt;&lt;br /&gt;// date of last payment. The function arguments are pointers to   *&lt;br /&gt;&lt;br /&gt;// strings where the input will be stored.                        *&lt;br /&gt;&lt;br /&gt;//*****************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void getInfo(char *sal, char *lname, char *bal, char *due,&lt;br /&gt;&lt;br /&gt;char *lastPay)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;getSal(sal);&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "Last Name: ";&lt;br /&gt;&lt;br /&gt;cin &gt;&gt; lname;&lt;br /&gt;&lt;br /&gt;lname[] = toupper(lname[]);&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "Account balance: ";&lt;br /&gt;&lt;br /&gt;cin &gt;&gt; bal;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "Past due Amount: ";&lt;br /&gt;&lt;br /&gt;cin &gt;&gt; due;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "Date of last payment (MM/DD/YYYY): ";&lt;br /&gt;&lt;br /&gt;cin &gt;&gt; lastPay;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//****************************************************************&lt;br /&gt;&lt;br /&gt;// Definition of function getSal.                                *&lt;br /&gt;&lt;br /&gt;// This function gives the user a menu from which to pick a      *&lt;br /&gt;&lt;br /&gt;// suitable title for the letter's addressee. The choices are    *&lt;br /&gt;&lt;br /&gt;// Mr. and Ms. The choice will be copied to the address pointed  *&lt;br /&gt;&lt;br /&gt;// to by sal.                                                    *&lt;br /&gt;&lt;br /&gt;//****************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void getSal(char *sal)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;int choice;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;do&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "salutation:\n";&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "\t) Mr.\n";&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "\t) Ms.\n";&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "Select one: ";&lt;br /&gt;&lt;br /&gt;cin &gt;&gt; choice;&lt;br /&gt;&lt;br /&gt;} while (choice !=  &amp;amp;&amp;amp; choice != );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (choice == )&lt;br /&gt;&lt;br /&gt;strcpy(sal, "Mr.");&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;strcpy(sal, "Ms.");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;(program continues)&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;Program -&lt;br /&gt;(continued)&lt;br /&gt;&lt;br /&gt;//*************************************************************&lt;br /&gt;&lt;br /&gt;// Definition of function printLetter.                        *&lt;br /&gt;&lt;br /&gt;// This function prints the form letter. The parameters are   *&lt;br /&gt;&lt;br /&gt;// pointers to the fields that contain user input.            *&lt;br /&gt;&lt;br /&gt;//*************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void printLetter(char *sal, char *lname, char *bal, char *due,&lt;br /&gt;&lt;br /&gt;char *lastPay)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;int position;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Print the salutation part of the letter&lt;br /&gt;&lt;br /&gt;position = ; // Start a new line.&lt;br /&gt;&lt;br /&gt;printline(part, position);&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; sal &lt;&lt; " " &lt;&lt; lname &lt;&lt; ":" &lt;&lt; endl &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Print the body of the letter&lt;br /&gt;&lt;br /&gt;position = ; // Start a new line.&lt;br /&gt;&lt;br /&gt;printline(part, position);&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; bal;  // Print account balance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Add length of balance to position.&lt;br /&gt;&lt;br /&gt;position += strlen(bal);&lt;br /&gt;&lt;br /&gt;printline(part, position);&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; due &lt;&lt; ". ";     // Print past due amount&lt;br /&gt;&lt;br /&gt;position += strlen(due)+ ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Add length of due and the period and space at the&lt;br /&gt;&lt;br /&gt;// end of the sentence to position.&lt;br /&gt;&lt;br /&gt;printline(part, position);&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; lastPay &lt;&lt; ". "; // Print date of last payment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Now Add length of lastPay and the period and space at the&lt;br /&gt;&lt;br /&gt;// end of the sentence to position.&lt;br /&gt;&lt;br /&gt;position += strlen(lastPay) + ;&lt;br /&gt;&lt;br /&gt;printline(part, position);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Print the closing.&lt;br /&gt;&lt;br /&gt;position = ; // Start a new line.&lt;br /&gt;&lt;br /&gt;printline(part, position);&lt;br /&gt;&lt;br /&gt;position = ; // Start a new line.&lt;br /&gt;&lt;br /&gt;printline(part, position);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Print the PS reminder.&lt;br /&gt;&lt;br /&gt;position = ; // Start a new line.&lt;br /&gt;&lt;br /&gt;printline(part, position);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;(program continues)&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;Program -&lt;br /&gt;(continued)&lt;br /&gt;&lt;br /&gt;//*******************************************************************&lt;br /&gt;&lt;br /&gt;// Definition of function printline.                                *&lt;br /&gt;&lt;br /&gt;// This function has two parameters: line and startCount.           *&lt;br /&gt;&lt;br /&gt;// The string pointed to by line is printed. startCount is the      *&lt;br /&gt;&lt;br /&gt;// starting position of the line in an  character field. There    *&lt;br /&gt;&lt;br /&gt;// are -character left and right margins within the             *&lt;br /&gt;&lt;br /&gt;// character field. The function performs word-wrap by looking      *&lt;br /&gt;&lt;br /&gt;// for space character within the line at or after the th         *&lt;br /&gt;&lt;br /&gt;// character. A new line is started when a space is found, or the   *&lt;br /&gt;&lt;br /&gt;// end of the field is reached.                                     *&lt;br /&gt;&lt;br /&gt;//*******************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void printline(const char *line, int &amp;amp;startCount)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;int charCount = ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (startCount &gt;= ) // If the line is already at&lt;br /&gt;&lt;br /&gt;{                     // or past the right margin...&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "\n";      // Sart a new line.&lt;br /&gt;&lt;br /&gt;startCount = ;    // Reset startCount.&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// The following while loop cycles through the string&lt;br /&gt;&lt;br /&gt;// printing it one character at a time. It watches for&lt;br /&gt;&lt;br /&gt;// spaces after the th position so word-wrap may be&lt;br /&gt;&lt;br /&gt;// performed.&lt;br /&gt;&lt;br /&gt;while (line[charCount] != '\')&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if (startCount &gt;=  &amp;amp;&amp;amp; line[charCount] == ' ')&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "          \n";  // Print right margin.&lt;br /&gt;&lt;br /&gt;charCount++;             // Skip over the space.&lt;br /&gt;&lt;br /&gt;startCount = ;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (startCount == )&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "          ";  // Print left margin.&lt;br /&gt;&lt;br /&gt;startCount = ;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;cout.put(line[charCount]); // Print the character.&lt;br /&gt;&lt;br /&gt;charCount++;               // Update subscript.&lt;br /&gt;&lt;br /&gt;startCount++;              // Update position counter.&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;String Manipulation&lt;br /&gt;Program -&lt;br /&gt;(continued)&lt;br /&gt;Program Output with Example Input Shown in Bold&lt;br /&gt;Salutation:&lt;br /&gt;) Mr.&lt;br /&gt;) Ms.&lt;br /&gt;Select one:&lt;br /&gt; [Enter]&lt;br /&gt;Last name:&lt;br /&gt;Jones [Enter]&lt;br /&gt;Account balance:&lt;br /&gt;. [Enter]&lt;br /&gt;Past due amount:&lt;br /&gt;. [Enter]&lt;br /&gt;Date of last payment(MM/DD/YYYY):&lt;br /&gt;// [Enter]&lt;br /&gt;Dear Mr. Jones:&lt;br /&gt;Our records show that your account has a balance of&lt;br /&gt;$. and a past due amount of $.. Your last&lt;br /&gt;payment was on //. Since we haven't heard from&lt;br /&gt;you in some time, would you please take a moment to&lt;br /&gt;send us a check for the past-due amount? We value your business&lt;br /&gt;and look forward to serving you in the future.&lt;br /&gt;Sincerely,&lt;br /&gt;The Management&lt;br /&gt;P.S. If you've already sent your payment, ignore this&lt;br /&gt;reminder.&lt;br /&gt;Do another letter? (Y/N)&lt;br /&gt;y [Enter]&lt;br /&gt;Salutation:&lt;br /&gt;) Mr.&lt;br /&gt;) Ms.&lt;br /&gt;Select one:&lt;br /&gt; [Enter]&lt;br /&gt;Last name:&lt;br /&gt;Hildebrand [Enter]&lt;br /&gt;Account balance:&lt;br /&gt;,. [Enter]&lt;br /&gt;Past due amount:&lt;br /&gt;,. [Enter]&lt;br /&gt;Date of last payment(MM/DD/YYYY):&lt;br /&gt;// [Enter]&lt;br /&gt;Dear Ms. Hildebrand:&lt;br /&gt;Our records show that your account has a balance of&lt;br /&gt;$,. and a past due amount of $,.. Your&lt;br /&gt;last payment was on //. Since we haven't heard&lt;br /&gt;from you in some time, would you please take a moment&lt;br /&gt;to send us a check for the past-due amount? We value&lt;br /&gt;your business and look forward to serving you in the&lt;br /&gt;future.&lt;br /&gt;Sincerely,&lt;br /&gt;The Management&lt;br /&gt;P.S. If you've already sent your payment, ignore this&lt;br /&gt;reminder.&lt;br /&gt;Do another letter? (Y/N)&lt;br /&gt;n [Enter]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-7664660188060551941?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/7664660188060551941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=7664660188060551941' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/7664660188060551941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/7664660188060551941'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/12/string-manipulation.html' title='String Manipulation'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-6236080419516072344</id><published>2008-12-12T20:58:00.000-08:00</published><updated>2008-12-23T03:57:26.944-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interviews'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='String'/><title type='text'>String Class Implementation</title><content type='html'>&lt;br /&gt;Earlier in this book you were introduced to the C++ standard library&lt;br /&gt;class. The string class automatically handles many of the tedious tasks involved in using strings,&lt;br /&gt;string such as dynamic memory allocation, and bounds checking. It also overloads operators,&lt;br /&gt;such as and , and offers many member functions that ease the job of working with + =&lt;br /&gt;strings. In this section, however, you will learn to write your own string handling class. In&lt;br /&gt;the process, you will see examples of the copy constructor and overloaded operators in&lt;br /&gt;full action.&lt;br /&gt;&lt;br /&gt;The MyString Class&lt;br /&gt;The class defined in this section is an abstract data type for handling strings. It&lt;br /&gt;MyString offers several advantages over standard C++ character array manipulation:&lt;br /&gt;&lt;br /&gt;• Memory is dynamically allocated for any string stored in a object. The MyString programmer using this class doesn’t need to be concerned with how large to make&lt;br /&gt;an array.&lt;br /&gt;• Strings may be assigned to a object with the = operator. The program-&lt;br /&gt;MyString mer using this class does not have to call the function.&lt;br /&gt;strcpy&lt;br /&gt;• One string may be concatenated to another with the += operator. This eliminates the need for the function.&lt;br /&gt;strcat&lt;br /&gt;• Strings may be tested with the relational operators. The programmer using this class doesn’t have to call the function.&lt;br /&gt;&lt;br /&gt;strcmp&lt;br /&gt;&lt;br /&gt;The following program listings show the class implementation.&lt;br /&gt;Contents of&lt;br /&gt;MyString.h&lt;br /&gt;&lt;br /&gt;// Specification file for the MyString class&lt;br /&gt;&lt;br /&gt;#ifndef MYSTRING_H&lt;br /&gt;&lt;br /&gt;#define MYSTRING_H&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;&lt;br /&gt;class MyString;   // Forward declaration.&lt;br /&gt;&lt;br /&gt;ostream &amp;amp;operator&lt;&lt;(ostream &amp;amp;, const MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;istream &amp;amp;operator&gt;&gt;(istream &amp;amp;, MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// MyString class. An abstract data type for handling strings.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class MyString&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;&lt;br /&gt;char *str;&lt;br /&gt;&lt;br /&gt;int len;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;&lt;br /&gt;// Default constructor&lt;br /&gt;&lt;br /&gt;MyString()&lt;br /&gt;&lt;br /&gt;{ str = NULL; len = ; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Copy constructor&lt;br /&gt;&lt;br /&gt;MyString(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{ str = new char[right.length() + ];&lt;br /&gt;&lt;br /&gt;strcpy(str, right.getValue());&lt;br /&gt;&lt;br /&gt;len = right.length(); }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// The following constructor initializes the&lt;br /&gt;&lt;br /&gt;// MyString object with a C-string&lt;br /&gt;&lt;br /&gt;MyString(char *sptr)&lt;br /&gt;&lt;br /&gt;{ len = strlen(sptr);&lt;br /&gt;&lt;br /&gt;str = new char[len + ];&lt;br /&gt;&lt;br /&gt;strcpy(str, sptr); }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Destructor&lt;br /&gt;&lt;br /&gt;~MyString()&lt;br /&gt;&lt;br /&gt;{ if (len != ) delete [] str; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// The length function returns the string length.&lt;br /&gt;&lt;br /&gt;int length() const&lt;br /&gt;&lt;br /&gt;{ return len; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// The getValue function returns the string.&lt;br /&gt;&lt;br /&gt;const char *getValue() const&lt;br /&gt;&lt;br /&gt;{ return str; };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Overloaded operators&lt;br /&gt;&lt;br /&gt;const MyString operator+=(MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;const char *operator+=(const char *);&lt;br /&gt;&lt;br /&gt;const MyString operator=(MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;const char *operator=(const char *);&lt;br /&gt;&lt;br /&gt;int operator==(MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;int operator==(const char *);&lt;br /&gt;&lt;br /&gt;int operator!=(MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;int operator!=(const char *);&lt;br /&gt;&lt;br /&gt;bool operator&gt;(MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;bool operator&gt;(const char *);&lt;br /&gt;&lt;br /&gt;bool operator&lt;(MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;&lt;br /&gt;bool operator&lt;(const char *);&lt;br /&gt;&lt;br /&gt;bool operator&gt;=(MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;bool operator&gt;=(const char*);&lt;br /&gt;&lt;br /&gt;bool operator&lt;=(MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;bool operator&lt;=(const char *);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Friends&lt;br /&gt;&lt;br /&gt;friend ostream &amp;amp;operator&lt;&lt;(ostream &amp;amp;, const MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;friend istream &amp;amp;operator&gt;&gt;(istream &amp;amp;, MyString &amp;amp;);&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;Contents of&lt;br /&gt;MyString.cpp&lt;br /&gt;&lt;br /&gt;// Implementation file for the MyString class&lt;br /&gt;&lt;br /&gt;#include &lt;cstring&gt;  // For string library functions&lt;br /&gt;&lt;br /&gt;#include "MyString.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded = operator. Called when operand     *&lt;br /&gt;&lt;br /&gt;// on the right is another MyString object.       *&lt;br /&gt;&lt;br /&gt;// Returns the calling object.                    *&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;const MyString MyString::operator=(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if (len != )&lt;br /&gt;&lt;br /&gt;delete [] str;&lt;br /&gt;&lt;br /&gt;str = new char[right.length() + ];&lt;br /&gt;&lt;br /&gt;strcpy(str, right.getValue());&lt;br /&gt;&lt;br /&gt;len = right.length();&lt;br /&gt;&lt;br /&gt;return *this;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded = operator. Called when operand     *&lt;br /&gt;&lt;br /&gt;// on the right is a C-string.                    *&lt;br /&gt;&lt;br /&gt;// Returns the str member of the calling object.  *&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;const char *MyString::operator=(const char *right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if (len != )&lt;br /&gt;&lt;br /&gt;delete [] str;&lt;br /&gt;&lt;br /&gt;len = strlen(right);&lt;br /&gt;&lt;br /&gt;str = new char[len + ];&lt;br /&gt;&lt;br /&gt;strcpy(str, right);&lt;br /&gt;&lt;br /&gt;return str;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded += operator. Called when operand    *&lt;br /&gt;&lt;br /&gt;// on the right is another MyString object.       *&lt;br /&gt;&lt;br /&gt;// Concatenates the str member of right to the    *&lt;br /&gt;&lt;br /&gt;// str member of the calling object.              *&lt;br /&gt;&lt;br /&gt;// Returns the calling object.                    *&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;const MyString MyString::operator+=(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;char *temp = str;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;str = new char[strlen(str) + right.length() + ];&lt;br /&gt;&lt;br /&gt;strcpy(str, temp);&lt;br /&gt;&lt;br /&gt;strcat(str, right.getValue());&lt;br /&gt;&lt;br /&gt;if (len != )&lt;br /&gt;&lt;br /&gt;delete [] temp;&lt;br /&gt;&lt;br /&gt;len = strlen(str);&lt;br /&gt;&lt;br /&gt;return *this;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded += operator. Called when operand    *&lt;br /&gt;&lt;br /&gt;// on the right is a string. Concatenates the     *&lt;br /&gt;&lt;br /&gt;// str member of right to the str member of       *&lt;br /&gt;&lt;br /&gt;// the calling object.                            *&lt;br /&gt;&lt;br /&gt;// Returns the str member of the calling object.  *&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;const char *MyString::operator+=(const char *right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;char *temp = str;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;str = new char[strlen(str) + strlen(right) + ];&lt;br /&gt;&lt;br /&gt;strcpy(str, temp);&lt;br /&gt;&lt;br /&gt;strcat(str, right);&lt;br /&gt;&lt;br /&gt;if (len != )&lt;br /&gt;&lt;br /&gt;delete [] temp;&lt;br /&gt;&lt;br /&gt;return str;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*****************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded == operator.                            *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a MyString *&lt;br /&gt;&lt;br /&gt;// object. Returns  if right.str is the same as str. *&lt;br /&gt;&lt;br /&gt;//*****************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int MyString::operator==(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;return !strcmp(str, right.getValue());&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;&lt;br /&gt;//****************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded == operator.                           *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a string. *&lt;br /&gt;&lt;br /&gt;// Returns  if right is the same as str.            *&lt;br /&gt;&lt;br /&gt;//****************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int MyString::operator==(const char *right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;return !strcmp(str, right);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*********************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded != operator.                                *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a MyString     *&lt;br /&gt;&lt;br /&gt;// object. Returns true if right.str is not equal to str. *&lt;br /&gt;&lt;br /&gt;//*********************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int MyString::operator!=(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;return strcmp(str, right.getValue());&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//****************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded != operator.                           *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a string. *&lt;br /&gt;&lt;br /&gt;// Returns true if right is not equal to str.        *&lt;br /&gt;&lt;br /&gt;//****************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int MyString::operator!=(const char *right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;return strcmp(str, right);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*********************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded &gt; operator.                                 *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a MyString     *&lt;br /&gt;&lt;br /&gt;// object. Returns true if str is greater than right.str. *&lt;br /&gt;&lt;br /&gt;//*********************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bool MyString::operator&gt;(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;bool status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (strcmp(str, right.getValue()) &gt; )&lt;br /&gt;&lt;br /&gt;status = true;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;status = false;&lt;br /&gt;&lt;br /&gt;return status;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//****************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded &gt; operator.                            *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a string. *&lt;br /&gt;&lt;br /&gt;// Returns true if str is greater than right.        *&lt;br /&gt;&lt;br /&gt;//****************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;&lt;br /&gt;bool MyString::operator&gt;(const char *right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;bool status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (strcmp(str, right) &gt; )&lt;br /&gt;&lt;br /&gt;status = true;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;status = false;&lt;br /&gt;&lt;br /&gt;return status;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//******************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded &lt; operator.                              *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a MyString  *&lt;br /&gt;&lt;br /&gt;// object. Returns true if str is less than right.str. *&lt;br /&gt;&lt;br /&gt;//******************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bool MyString::operator&lt;(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;bool status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (strcmp(str, right.getValue()) &lt; )&lt;br /&gt;&lt;br /&gt;status = true;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;status = false;&lt;br /&gt;&lt;br /&gt;return status;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//****************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded &lt; operator.                            *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a string. *&lt;br /&gt;&lt;br /&gt;// Returns true if str is less than right.           *&lt;br /&gt;&lt;br /&gt;//****************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bool MyString::operator&lt;(const char *right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;bool status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (strcmp(str, right) &lt; )&lt;br /&gt;&lt;br /&gt;status = true;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;status = false;&lt;br /&gt;&lt;br /&gt;return status;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*****************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded &gt;= operator.                            *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a MyString *&lt;br /&gt;&lt;br /&gt;// object. Returns true if str is greater than or     *&lt;br /&gt;&lt;br /&gt;// equal to right.str                                 *&lt;br /&gt;&lt;br /&gt;//*****************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bool MyString::operator&gt;=(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;bool status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;&lt;br /&gt;if (strcmp(str, right.getValue()) &gt;= )&lt;br /&gt;&lt;br /&gt;status = true;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;status = false;&lt;br /&gt;&lt;br /&gt;return status;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*********************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded &gt;= operator.                                *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a string.      *&lt;br /&gt;&lt;br /&gt;// Returns true if str is greater than or equal to right. *&lt;br /&gt;&lt;br /&gt;//*********************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bool MyString::operator&gt;=(const char *right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;bool status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (strcmp(str, right) &gt;= )&lt;br /&gt;&lt;br /&gt;status = true;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;status = false;&lt;br /&gt;&lt;br /&gt;return status;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//**********************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded &lt;= operator.                                 *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a MyString      *&lt;br /&gt;&lt;br /&gt;// object. Returns true if right.str is less than or equal *&lt;br /&gt;&lt;br /&gt;// to right.str.                                           *&lt;br /&gt;&lt;br /&gt;//**********************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bool MyString::operator&lt;=(MyString &amp;amp;right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;bool status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (strcmp(str, right.getValue()) &lt;= )&lt;br /&gt;&lt;br /&gt;status = true;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;status = false;&lt;br /&gt;&lt;br /&gt;return status;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//******************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded &lt;= operator.                             *&lt;br /&gt;&lt;br /&gt;// Called when the operand on the right is a string.   *&lt;br /&gt;&lt;br /&gt;// Returns true if str is less than or equal to right. *&lt;br /&gt;&lt;br /&gt;//******************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bool MyString::operator&lt;=(const char *right)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;bool status;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (strcmp(str, right) &lt;= )&lt;br /&gt;&lt;br /&gt;status = true;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;status = false;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;&lt;br /&gt;return status;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded stream insertion operator (&lt;&lt;).     *&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ostream &amp;amp;operator&lt;&lt;(ostream &amp;amp;strm, const MyString &amp;amp;obj)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;strm &lt;&lt; obj.str;&lt;br /&gt;&lt;br /&gt;return strm;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;// Overloaded stream extraction operator (&gt;&gt;).    *&lt;br /&gt;&lt;br /&gt;//*************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;istream &amp;amp;operator&gt;&gt;(istream &amp;amp;strm, MyString &amp;amp;obj)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;strm.getline(obj.str, obj.len);&lt;br /&gt;&lt;br /&gt;strm.ignore();&lt;br /&gt;&lt;br /&gt;return strm;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;The Copy Constructor&lt;br /&gt;Because the&lt;br /&gt;class has a pointer as a member and dynamically allocates memory&lt;br /&gt;MyString&lt;br /&gt;to store its string value, a copy constructor is provided. This function will cause the object&lt;br /&gt;to properly set up its data when initialized with another&lt;br /&gt;object.&lt;br /&gt;MyString&lt;br /&gt;The Overloaded = Operators&lt;br /&gt;The&lt;br /&gt;class has two overloaded = operators. The first is for assigning one&lt;br /&gt;MyString&lt;br /&gt;object to another. This operator function is called when the operand on the&lt;br /&gt;MyString&lt;br /&gt;right of the = sign is a&lt;br /&gt;object, as shown in the following code segment:&lt;br /&gt;MyString&lt;br /&gt;MyString first("Hello"), second;&lt;br /&gt;second = first;&lt;br /&gt;The second version of&lt;br /&gt;’s = operator is for assigning a traditional C-string to a&lt;br /&gt;MyString&lt;br /&gt;object. This operator function is called when the operand on the right of = is a&lt;br /&gt;MyString&lt;br /&gt;string literal or any pointer to a C-string (such as the name of a char array). This is shown&lt;br /&gt;in the following program segment:&lt;br /&gt;MyString name;&lt;br /&gt;char who[] = "Jimmy";&lt;br /&gt;name = who;&lt;br /&gt;The Overloaded += Operators&lt;br /&gt;The += operator is designed to concatenate the string on its right to the&lt;br /&gt;object&lt;br /&gt;MyString&lt;br /&gt;on its left. Like the = operators,&lt;br /&gt;has two versions of +=. The first version is&lt;br /&gt;MyString&lt;br /&gt;designed to work when the right operand is another&lt;br /&gt;object, as shown in the fol-&lt;br /&gt;MyString&lt;br /&gt;lowing program segment:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;MyString first("Hello "), second("world");&lt;br /&gt;first += second;&lt;br /&gt;The second version of the += operator will be called when the right operand is a literal&lt;br /&gt;string or any pointer to a character. It is shown here:&lt;br /&gt;MyString first("Hello ");&lt;br /&gt;first += "World";&lt;br /&gt;The Overloaded == Operators&lt;br /&gt;The&lt;br /&gt;object has overloaded versions of the == operator for performing equality&lt;br /&gt;MyString&lt;br /&gt;tests. Like the other operators, the first version is designed to work with another&lt;br /&gt;object and the second is designed to work with a traditional C-string.&lt;br /&gt;MyString&lt;br /&gt;The&lt;br /&gt;operator functions return an integer that can be treated as a Boolean value. Both&lt;br /&gt;==&lt;br /&gt;functions use&lt;br /&gt;to compare the operands, and then returns the negative of&lt;br /&gt;’s&lt;br /&gt;strcmp&lt;br /&gt;strcmp&lt;br /&gt;return value. (Recall that&lt;br /&gt;uses inverted logic: It returns  when its arguments are&lt;br /&gt;strcmp&lt;br /&gt;equal, and returns a nonzero value when they are not equal.) So, these operator functions&lt;br /&gt;return&lt;br /&gt;if the string contained in the right operand matches the&lt;br /&gt;member of the&lt;br /&gt;true&lt;br /&gt;str&lt;br /&gt;calling object. If the strings of the two operands do not match, the functions return&lt;br /&gt;.&lt;br /&gt;false&lt;br /&gt;These operator functions allow the programmer using this class to construct relational&lt;br /&gt;expressions such as those shown in the following program segments:&lt;br /&gt;MyString name("John"), name("John");&lt;br /&gt;if (name == name)&lt;br /&gt;cout &lt;&lt; "The names are the same.\n";&lt;br /&gt;else&lt;br /&gt;cout &lt;&lt; "The names are different.\n";&lt;br /&gt;MyString name("John");&lt;br /&gt;if (name == "Jon")&lt;br /&gt;cout &lt;&lt; "The names are the same.\n";&lt;br /&gt;else&lt;br /&gt;cout &lt;&lt; "The names are different.\n";&lt;br /&gt;The Overloaded &gt; and &lt; Operators&lt;br /&gt;The&lt;br /&gt;object has two overloaded versions of the&lt;br /&gt;operator for performing&lt;br /&gt;MyString&lt;br /&gt;&gt;&lt;br /&gt;greater-than tests, and the &lt; operator for performing less-than tests. The first version of&lt;br /&gt;each is designed to work with another&lt;br /&gt;object and the second is designed to&lt;br /&gt;MyString&lt;br /&gt;work with a traditional C-string. (The functions use the library function&lt;br /&gt;to deter-&lt;br /&gt;strcmp&lt;br /&gt;mine if a greater-than or less-than relationship exists.)&lt;br /&gt;The &gt; functions return a&lt;br /&gt;if the&lt;br /&gt;member of the calling object is greater than the&lt;br /&gt;true&lt;br /&gt;str&lt;br /&gt;string contained in the right operand. Otherwise, the functions return&lt;br /&gt;. The &lt; func-&lt;br /&gt;false&lt;br /&gt;tions return a&lt;br /&gt;if the&lt;br /&gt;member of the calling object is less than the string contained&lt;br /&gt;true&lt;br /&gt;str&lt;br /&gt;in the right operand. Otherwise, they return&lt;br /&gt;.&lt;br /&gt;false&lt;br /&gt;These operator functions allow the programmer using this class to construct relational&lt;br /&gt;expressions such as those shown in the following program segments:&lt;br /&gt;MyString name("John"), name("Jon");&lt;br /&gt;if (name &gt; name)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;cout &lt;&lt; "John is greater than Jon.\n";&lt;br /&gt;else&lt;br /&gt;cout &lt;&lt; "John is not greater than Jon.\n";&lt;br /&gt;MyString name("John");&lt;br /&gt;if (name &lt; "Jon")&lt;br /&gt;cout &lt;&lt; "John is less than Jon.\n";&lt;br /&gt;else&lt;br /&gt;cout &lt;&lt; "John is not greater than Jon.\n";&lt;br /&gt;The Overloaded &gt;= and &lt;= Operators&lt;br /&gt;The&lt;br /&gt;object has two overloaded versions of the &gt;= operator for performing&lt;br /&gt;MyString&lt;br /&gt;greater-than or equal-to tests, and the &lt;= operator for performing less-than or equal-to&lt;br /&gt;tests. The first version of each is designed to work with another&lt;br /&gt;object and the&lt;br /&gt;MyString&lt;br /&gt;second is designed to work with a traditional C-string. (The functions use the library func-&lt;br /&gt;tion&lt;br /&gt;to determine if a greater-than or less-than relationship exists.)&lt;br /&gt;strcmp&lt;br /&gt;The &gt;= functions return a&lt;br /&gt;if the&lt;br /&gt;member of the calling object is greater than or&lt;br /&gt;true&lt;br /&gt;str&lt;br /&gt;equal to the string contained in the right operand. Otherwise, the functions return&lt;br /&gt;.&lt;br /&gt;false&lt;br /&gt;The &lt;= functions return&lt;br /&gt;if the&lt;br /&gt;member of the calling object is less than or equal&lt;br /&gt;true&lt;br /&gt;str&lt;br /&gt;to the string contained in the right operand. Otherwise, they return&lt;br /&gt;.&lt;br /&gt;false&lt;br /&gt;These operator functions allow the programmer using this class to construct relational&lt;br /&gt;expressions such as those shown in the following program segments:&lt;br /&gt;MyString name("John"), name("Jon");&lt;br /&gt;if (name &gt;= name)&lt;br /&gt;cout &lt;&lt; "John is greater than or equal to Jon.\n";&lt;br /&gt;else&lt;br /&gt;cout &lt;&lt; "John is not greater than or equal to Jon.\n";&lt;br /&gt;MyString name("John");&lt;br /&gt;if (name &lt;= "Jon")&lt;br /&gt;cout &lt;&lt; "John is less than or equal to Jon.\n";&lt;br /&gt;else&lt;br /&gt;cout &lt;&lt; "John is not less than or equal to Jon.\n";&lt;br /&gt;Program - shows how&lt;br /&gt;’s += operator performs string concatenation. Addi-&lt;br /&gt;MyString&lt;br /&gt;tionally, the program’s source code demonstrates how&lt;br /&gt;allows the programmer&lt;br /&gt;MyString&lt;br /&gt;to treat strings much like any other built-in data type.&lt;br /&gt;Program -&lt;br /&gt;&lt;br /&gt;// This program demonstrates the MyString class.&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;&lt;br /&gt;#include "MyString.h"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;// Define and initialize several MyString objects.&lt;br /&gt;&lt;br /&gt;MyString object("This"), object("is");&lt;br /&gt;&lt;br /&gt;MyString object("a test.");&lt;br /&gt;&lt;br /&gt;MyString object = object;&lt;br /&gt;&lt;br /&gt;MyString object("is only a test.");&lt;br /&gt;(program continues)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;Program -&lt;br /&gt;(continued)&lt;br /&gt;&lt;br /&gt;// Define a C-string.&lt;br /&gt;&lt;br /&gt;char string[] = "a test.";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Display the MyString objects.&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "object: " &lt;&lt; object &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "object: " &lt;&lt; object &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "object: " &lt;&lt; object &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "object: " &lt;&lt; object &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "object: " &lt;&lt; object &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Display the C-string.&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string: " &lt;&lt; string &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Test the overloaded += operator.&lt;br /&gt;&lt;br /&gt;object += " ";&lt;br /&gt;&lt;br /&gt;object += object;&lt;br /&gt;&lt;br /&gt;object += " ";&lt;br /&gt;&lt;br /&gt;object += object;&lt;br /&gt;&lt;br /&gt;object += " ";&lt;br /&gt;&lt;br /&gt;object += object;&lt;br /&gt;&lt;br /&gt;object += " ";&lt;br /&gt;&lt;br /&gt;object += object;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "object: " &lt;&lt; object &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;return ;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;Program Output&lt;br /&gt;object: This&lt;br /&gt;object: is&lt;br /&gt;object: a test.&lt;br /&gt;object: This&lt;br /&gt;object: is only a test.&lt;br /&gt;string: a test.&lt;br /&gt;object: This is a test. This is only a test.&lt;br /&gt;Program - shows how&lt;br /&gt;’s relational operators can be used to compare&lt;br /&gt;MyString&lt;br /&gt;strings with the same ease that numeric data types are compared.&lt;br /&gt;Program -&lt;br /&gt;&lt;br /&gt;// This program demonstrates the MyString class.&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;&lt;br /&gt;#include "MyString.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;// Define several MyString objects.&lt;br /&gt;&lt;br /&gt;MyString name("Billy"), name("Sue");&lt;br /&gt;&lt;br /&gt;MyString name("joe");&lt;br /&gt;&lt;br /&gt;MyString string("ABC"), string("DEF");&lt;br /&gt;&lt;br /&gt;(program continues)&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;Program -&lt;br /&gt;(continued)&lt;br /&gt;&lt;br /&gt;// Display the MyString object values.&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "name: " &lt;&lt; name.getValue() &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "name: " &lt;&lt; name.getValue() &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "name: " &lt;&lt; name.getValue() &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string: " &lt;&lt; string.getValue() &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string: " &lt;&lt; string.getValue() &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Test the overloaded relational operators.&lt;br /&gt;&lt;br /&gt;if (name == name)&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "name is equal to name.\n";&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "name is not equal to name.\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (name == "joe")&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "name is equal to joe.\n";&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "name is not equal to joe.\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (string &gt; string)&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is greater than string.\n";&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is not greater than string.\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (string &lt; string)&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is less than string.\n";&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is not less than string.\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (string &gt;= string)&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is greater than or equal to string.\n";&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is not greater than or equal to string.\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (string &gt;= "ABC")&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is greater than or equal to ABC.\n";&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is not greater than or equal to ABC.\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (string &lt;= string)&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is less than or equal to string.\n";&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is not less than or equal to string.\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (string &lt;= "DEF")&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is less than or equal to DEF.\n";&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; "string is not less than or equal to DEF.\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;return ;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creating a String Class&lt;br /&gt;Program -&lt;br /&gt;(continued)&lt;br /&gt;Program Output&lt;br /&gt;name: Billy&lt;br /&gt;name: Sue&lt;br /&gt;name: joe&lt;br /&gt;string: ABC&lt;br /&gt;string: DEF&lt;br /&gt;name is not equal to name.&lt;br /&gt;name is equal to joe.&lt;br /&gt;string is not greater than string.&lt;br /&gt;string is less than string.&lt;br /&gt;string is not greater than or equal to string.&lt;br /&gt;string is greater than or equal to ABC.&lt;br /&gt;string is less than or equal to string.&lt;br /&gt;string is less than or equal to DEF.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-6236080419516072344?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/6236080419516072344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=6236080419516072344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/6236080419516072344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/6236080419516072344'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/12/string-class-implementation.html' title='String Class Implementation'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-4274999093585434237</id><published>2008-12-11T06:47:00.000-08:00</published><updated>2008-12-23T03:57:26.944-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Namespaces'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Namespaces</title><content type='html'>Introduction&lt;br /&gt;Namespaces are an ANSI C++ feature that allows programmers to create a scope for global&lt;br /&gt;identifiers. They are useful in preventing errors when two or more global declarations&lt;br /&gt;use the same name.&lt;br /&gt;For example, assume you are a programmer in the accounting department of a business.&lt;br /&gt;Your company has purchased two libraries of C++ code from a software vendor. One of&lt;br /&gt;the libraries is designed to handle customer accounts, and contains a class object named&lt;br /&gt;payable&lt;br /&gt;. The other library is designed to handle company payroll, and also has a class&lt;br /&gt;object named&lt;br /&gt;payable&lt;br /&gt;. You are writing a program that integrates both libraries, but the&lt;br /&gt;compiler generates an error because the two class objects have the same name. You cannot&lt;br /&gt;modify the libraries because the software vendor does not sell the source code, only libraries&lt;br /&gt;of object code.&lt;br /&gt;This problem can be solved when the software vendor places each library in its own&lt;br /&gt;namespace. Each namespace has its own name, which must be used to qualify the name of&lt;br /&gt;its members. For instance, the&lt;br /&gt;payable&lt;br /&gt;object that is part of the customer accounts library&lt;br /&gt;might exist in a namespace named&lt;br /&gt;customer&lt;br /&gt;, while the object that is part of the employee&lt;br /&gt;payroll library might exist in a namespace named&lt;br /&gt;payroll&lt;br /&gt;. When you, the application&lt;br /&gt;programmer, work with the objects, you must specify the namespace that the object is a&lt;br /&gt;member of. One way of accomplishing this is by extending the name of the object with the&lt;br /&gt;namespace name, using the scope resolution operator. For example, the&lt;br /&gt;payable&lt;br /&gt;object&lt;br /&gt;that is a member of the&lt;br /&gt;customer&lt;br /&gt;namespace is specified as&lt;br /&gt;customer::payable&lt;br /&gt;, and the&lt;br /&gt;object that is a member of the&lt;br /&gt;payroll&lt;br /&gt;namespace is specified as&lt;br /&gt;payroll::payable&lt;br /&gt;.&lt;br /&gt;Another way to specify the namespace is by placing a&lt;br /&gt;using namespace&lt;br /&gt;statement in the&lt;br /&gt;source file that references the namespace’s member object. For example, the following&lt;br /&gt;statement (placed near the beginning of a source file) instructs the compiler that the file&lt;br /&gt;uses members of the&lt;br /&gt;customer&lt;br /&gt;namespace.&lt;br /&gt;using namespace customer;&lt;br /&gt;2&lt;br /&gt;Appendix F: Namespaces&lt;br /&gt;Likewise, the following statement instructs the compiler that the source file uses members&lt;br /&gt;of the&lt;br /&gt;payroll&lt;br /&gt;namespace:&lt;br /&gt;using namespace payroll;&lt;br /&gt;When a&lt;br /&gt;using namespace&lt;br /&gt;statement has been placed in a source file, it is no longer necessary&lt;br /&gt;for statements in that source file to qualify the names of the namespace’s members&lt;br /&gt;with the namespace name and the scope resolution operator.&lt;br /&gt;Defining a Namespace&lt;br /&gt;A namespace is defined in the following manner.&lt;br /&gt;For example, look at Program F-1. It defines the&lt;br /&gt;test&lt;br /&gt;namespace, which has three members:&lt;br /&gt;x&lt;br /&gt;,&lt;br /&gt;y&lt;br /&gt;, and&lt;br /&gt;z&lt;br /&gt;.&lt;br /&gt;In Program F-1, the variables&lt;br /&gt;x&lt;br /&gt;,&lt;br /&gt;y&lt;br /&gt;, and&lt;br /&gt;z&lt;br /&gt;are defined in the&lt;br /&gt;test&lt;br /&gt;namespace’s scope. Each&lt;br /&gt;time the program accesses one of these variables,&lt;br /&gt;test::&lt;br /&gt;must precede the variable name.&lt;br /&gt;Otherwise, a compiler error will occur.&lt;br /&gt;namespace&lt;br /&gt;namespace_name&lt;br /&gt;{&lt;br /&gt;declarations…&lt;br /&gt;}&lt;br /&gt;Program F-1&lt;br /&gt;1 // Demonstrates a simple namespace&lt;br /&gt;2 #include &lt;iostream&gt;&lt;br /&gt;3 using namespace std;&lt;br /&gt;4&lt;br /&gt;5 namespace test&lt;br /&gt;6 {&lt;br /&gt;7 int x, y, z;&lt;br /&gt;8 }&lt;br /&gt;9&lt;br /&gt;10 int main()&lt;br /&gt;11 {&lt;br /&gt;12 test::x = 10;&lt;br /&gt;13 test::y = 20;&lt;br /&gt;14 test::z = 30;&lt;br /&gt;15 cout &lt;&lt; "The values are:\n";&lt;br /&gt;16 cout &lt;&lt; test::x &lt;&lt; " " &lt;&lt; test::y&lt;br /&gt;17 &lt;&lt; " " &lt;&lt; test::z &lt;&lt; endl;&lt;br /&gt;18 return 0;&lt;br /&gt;19 }&lt;br /&gt;Program Output&lt;br /&gt;The values are:&lt;br /&gt;10 20 30&lt;br /&gt;Appendix F: Namespaces&lt;br /&gt;3&lt;br /&gt;Program F-2 demonstrates how programmers can use namespaces to resolve naming&lt;br /&gt;conflicts. The program defines two namespaces,&lt;br /&gt;test1&lt;br /&gt;and&lt;br /&gt;test2&lt;br /&gt;. Both namespaces have&lt;br /&gt;variables named&lt;br /&gt;x&lt;br /&gt;,&lt;br /&gt;y&lt;br /&gt;, and&lt;br /&gt;z&lt;br /&gt;as members.&lt;br /&gt;An alternative approach to qualifying the names of namespace members is to use the&lt;br /&gt;using&lt;br /&gt;namespace&lt;br /&gt;statement. This statement tells the compiler which namespace to search&lt;br /&gt;for an identifier, when the identifier cannot be found in the current scope. Program F-3&lt;br /&gt;demonstrates the statement.&lt;br /&gt;Program F-2&lt;br /&gt;1 // Demonstrates two namespaces&lt;br /&gt;2 #include &lt;iostream&gt;&lt;br /&gt;3 using namespace std;&lt;br /&gt;4&lt;br /&gt;5 namespace test1&lt;br /&gt;6 {&lt;br /&gt;7 int x, y, z;&lt;br /&gt;8 }&lt;br /&gt;9&lt;br /&gt;10 namespace test2&lt;br /&gt;11 {&lt;br /&gt;12 int x, y, z;&lt;br /&gt;13 }&lt;br /&gt;14&lt;br /&gt;15 int main()&lt;br /&gt;16 {&lt;br /&gt;17 test1::x = 10;&lt;br /&gt;18 test1::y = 20;&lt;br /&gt;19 test1::z = 30;&lt;br /&gt;20 cout &lt;&lt; "The test1 values are:\n";&lt;br /&gt;21 cout &lt;&lt; test1::x &lt;&lt; " " &lt;&lt; test1::y&lt;br /&gt;22 &lt;&lt; " " &lt;&lt; test1::z &lt;&lt; endl;&lt;br /&gt;23 test2::x = 1;&lt;br /&gt;24 test2::y = 2;&lt;br /&gt;25 test2::z = 3;&lt;br /&gt;26 cout &lt;&lt; "The test2 values are:\n";&lt;br /&gt;27 cout &lt;&lt; test2::x &lt;&lt; " " &lt;&lt; test2::y&lt;br /&gt;28 &lt;&lt; " " &lt;&lt; test2::z &lt;&lt; endl;&lt;br /&gt;29 return 0;&lt;br /&gt;30 }&lt;br /&gt;Program Output&lt;br /&gt;The test1 values are:&lt;br /&gt;10 20 30&lt;br /&gt;The test2 values are:&lt;br /&gt;1 2 3&lt;br /&gt;4&lt;br /&gt;Appendix F: Namespaces&lt;br /&gt;The&lt;br /&gt;using namespace demo;&lt;br /&gt;statement eliminates the need to precede&lt;br /&gt;testObject&lt;br /&gt;with&lt;br /&gt;demo::&lt;br /&gt;. The compiler automatically uses the namespace demo to find the identifier.&lt;br /&gt;ANSI C++ and the&lt;br /&gt;std&lt;br /&gt;Namespace&lt;br /&gt;All the identifiers in the ANSI standard header files are part of the&lt;br /&gt;std&lt;br /&gt;namespace. In&lt;br /&gt;ANSI C++,&lt;br /&gt;cin&lt;br /&gt;and&lt;br /&gt;cout&lt;br /&gt;are written as&lt;br /&gt;std::cin&lt;br /&gt;and&lt;br /&gt;std::cout&lt;br /&gt;. If you do not wish to&lt;br /&gt;specify&lt;br /&gt;std::&lt;br /&gt;with&lt;br /&gt;cin&lt;br /&gt;or&lt;br /&gt;cout&lt;br /&gt;(or any of the ANSI standard identifiers), you must write&lt;br /&gt;the following statement in your program:&lt;br /&gt;using namespace std;&lt;br /&gt;Program F-3&lt;br /&gt;Contents of&lt;br /&gt;nsdemo.h&lt;br /&gt;1 // This file defines a namespace named demo.&lt;br /&gt;2 // In the demo namespace a class named NsDemo&lt;br /&gt;3 // is declared, and an instance of the class&lt;br /&gt;4 // named testObject is defined.&lt;br /&gt;5&lt;br /&gt;6 namespace demo&lt;br /&gt;7 {&lt;br /&gt;8 class NsDemo&lt;br /&gt;9 {&lt;br /&gt;10 public:&lt;br /&gt;11 int x, y, z;&lt;br /&gt;12 };&lt;br /&gt;13&lt;br /&gt;14 NsDemo testObject;&lt;br /&gt;15 }&lt;br /&gt;Contents of Main File,&lt;br /&gt;PrF-3.cpp&lt;br /&gt;1 // A demonstration of the using namespace statement.&lt;br /&gt;2 #include &lt;iostream&gt;&lt;br /&gt;3 #include "nsdemo.h"&lt;br /&gt;4 using namespace std;&lt;br /&gt;5 using namespace demo;&lt;br /&gt;6&lt;br /&gt;7 int main()&lt;br /&gt;8 {&lt;br /&gt;9 testObject.x = 10;&lt;br /&gt;10 testObject.y = 20;&lt;br /&gt;11 testObject.z = 30;&lt;br /&gt;12 cout &lt;&lt; "The values are:\n"&lt;br /&gt;13 &lt;&lt; testObject.x &lt;&lt; " "&lt;br /&gt;14 &lt;&lt; testObject.y &lt;&lt; " "&lt;br /&gt;15 &lt;&lt; testObject.z &lt;&lt; endl;&lt;br /&gt;16 return 0;&lt;br /&gt;17 }&lt;br /&gt;Program Output&lt;br /&gt;The values are:&lt;br /&gt;10 20 30&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-4274999093585434237?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/4274999093585434237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=4274999093585434237' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4274999093585434237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4274999093585434237'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/12/namespaces.html' title='Namespaces'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-5017496906618823233</id><published>2008-12-08T17:47:00.001-08:00</published><updated>2008-12-23T03:57:26.944-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Articles'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>The `fork()' system call</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;link rel="themeData" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-IN&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:Batang; 	panose-1:2 3 6 0 0 1 1 1 1 1; 	mso-font-alt:바탕; 	mso-font-charset:129; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1342176593 1775729915 48 0 524447 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:1; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:variable; 	mso-font-signature:0 0 0 0 0 0;} @font-face 	{font-family:"\@Batang"; 	panose-1:2 3 6 0 0 1 1 1 1 1; 	mso-font-charset:129; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1342176593 1775729915 48 0 524447 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:Batang; 	mso-ansi-language:EN-US; 	mso-fareast-language:KO;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-fareast-font-family:Batang;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 72.0pt 72.0pt 72.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:436096345; 	mso-list-template-ids:1310996300;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l0:level2 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:72.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l0:level3 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:108.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Wingdings;} @list l1 	{mso-list-id:1841772375; 	mso-list-template-ids:1938329770;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman","serif";} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="font-size: 18pt; color: black;" lang="EN-US"&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a name="concrete/fork"&gt;&lt;/a&gt;&lt;span style="color: black;" lang="EN-US"&gt;From the &lt;b&gt;C&lt;/b&gt; programming language, the &lt;/span&gt;&lt;a name="an2837"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;a name="an2838"&gt;&lt;/a&gt;system call is well known. When a program needs to start a new process, &lt;/span&gt;&lt;a name="an2839"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;system()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; can be used, but this requires the program to wait for the &lt;a name="an2840"&gt;&lt;/a&gt;&lt;i&gt;child process&lt;/i&gt; to terminate. The more general way to spawn subprocesses is to call &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;In this section we will see how &lt;b&gt;C++&lt;/b&gt; can be used to wrap classes around a complex system call like &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. Much of what follows in this section directly applies to the &lt;a name="an2841"&gt;&lt;/a&gt;Unix &lt;a name="an2842"&gt;&lt;/a&gt;operating system, and the discussion will therefore focus on that operating system. However, other systems usually provide comparable facilities. The following discussion is based heavily on the notion of &lt;a name="an2843"&gt;&lt;/a&gt;&lt;i&gt;design patterns&lt;/i&gt;, as published by &lt;i&gt;Gamma et al.&lt;/i&gt; (1995) &lt;a name="an2844"&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;When &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is called, the current program is duplicated in memory, thus creating a new process, and both processes continue their execution just below the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; system call. The two processes may, however, inspect the return value of &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;: the return value in the original process (called the &lt;a name="an2845"&gt;&lt;/a&gt;&lt;i&gt;parent process&lt;/i&gt;) differs from the return value in the newly created process (called the &lt;a name="an2846"&gt;&lt;/a&gt;&lt;i&gt;child process&lt;/i&gt;): &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;In      the &lt;i&gt;parent process&lt;/i&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span lang="EN-US"&gt; returns the &lt;a name="an2847"&gt;&lt;/a&gt;&lt;i&gt;process ID&lt;/i&gt; of the child      process created by the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span lang="EN-US"&gt; system call. This is a positive integer value. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;In      the &lt;i&gt;child process&lt;/i&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span lang="EN-US"&gt; returns 0. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;If &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span lang="EN-US"&gt; fails, -1 is returned. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;A basic &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; class should hide all bookkeeping details of a system call like &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; from its users. The class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; developed here will do just that. The class itself only needs to take care of the proper execution of the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; system call. Normally, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is called to start a child process, usually boiling down to the execution of a separate process. This child process may expect input at its standard input stream and/or may generate output to its standard output and/or standard error streams. &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; does not know all this, and does not have to know what the child process will do. However, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; objects should be able to activate their child processes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;Unfortunately, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;'s constructor cannot know what actions its child process should perform. Similarly, it cannot know what actions the parent process should perform. For this particular situation, the &lt;a name="an2848"&gt;&lt;/a&gt;&lt;i&gt;template method design pattern&lt;/i&gt; &lt;a name="an2849"&gt;&lt;/a&gt;was developed. According to Gamma c.s., the &lt;i&gt;template method design pattern&lt;/i&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;``Define(s) the skeleton of an algorithm in an operation, deferring some steps to subclasses. (The) Template Method (design pattern) lets subclasses redefine certain steps of an algorithm, without changing the algorithm's structure.'' &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;This design pattern allows us to define an &lt;a name="an2850"&gt;&lt;/a&gt;&lt;i&gt;abstract base class&lt;/i&gt; &lt;a name="an2851"&gt;&lt;/a&gt;already implementing the essential steps related to the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; system call and deferring the implementation of certain normally used parts of the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; system call to subclasses. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;The &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; abstract base class itself has the following characteristics: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;It      defines a data member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_pid&lt;/span&gt;&lt;span lang="EN-US"&gt;. This data member will contain the child's &lt;a name="an2852"&gt;&lt;/a&gt;&lt;i&gt;process      id&lt;/i&gt; (in the parent process) and the value 0 in the child process: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;class Fork&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;int d_pid;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Its      public interface declares but two members: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul type="circle"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;a &lt;/span&gt;&lt;a name="an2853"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span lang="EN-US"&gt; member       function, performing the actual forking (i.e., it will create the (new)       child process); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;an &lt;i&gt;empty&lt;/i&gt;       &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;virtual&lt;/span&gt;&lt;span lang="EN-US"&gt; destructor &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;~Fork()&lt;/span&gt;&lt;span lang="EN-US"&gt;, which may be overridden       by derived classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="color: black;" lang="EN-US"&gt;Here is &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;'s complete public interface: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;virtual ~Fork()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;void fork();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;All      remaining member functions are declared in the class's &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;protected&lt;/span&gt;&lt;span lang="EN-US"&gt; section and can thus &lt;i&gt;only&lt;/i&gt;      be used by derived classes. They are: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul type="circle"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The       member function &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;pid()&lt;/span&gt;&lt;span lang="EN-US"&gt;, allowing derived classes to access the system &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span lang="EN-US"&gt;'s return value: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;int pid()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;return d_pid;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;ul type="circle"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;A       member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;int waitForChild()&lt;/span&gt;&lt;span lang="EN-US"&gt;, which can be called by parent processes to wait for the       completion of their child processes (as discussed below). This member is       declared in the class interface. Its implementation is &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include "fork.ih"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;int Fork::waitForChild()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;int status;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;waitpid(d_pid, &amp;amp;status, 0);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;return WEXITSTATUS(status);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt;"&gt;&lt;span style="color: black;" lang="EN-US"&gt;This simple implementation returns the child's &lt;a name="an2854"&gt;&lt;/a&gt;&lt;i&gt;exit status&lt;/i&gt; to the parent. The called system function &lt;/span&gt;&lt;a name="an2855"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;waitpid()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;i&gt;blocks&lt;/i&gt; until the child terminates. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;ul type="circle"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;When       &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span lang="EN-US"&gt; system calls       are used, &lt;i&gt;parent processes&lt;/i&gt; &lt;a name="an2856"&gt;&lt;/a&gt;and &lt;a name="an2857"&gt;&lt;/a&gt;&lt;i&gt;child       processes&lt;/i&gt; &lt;a name="an2858"&gt;&lt;/a&gt;may always be distinguished. The main       distinction between these processes is that &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_pid&lt;/span&gt;&lt;span lang="EN-US"&gt; will be equal to the child's process-id in the parent       process, while &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_pid&lt;/span&gt;&lt;span lang="EN-US"&gt; will be equal to 0 in the child process itself. Since these       two processes may always be distinguished, they must be implemented by       classes derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span lang="EN-US"&gt;. To enforce this requirement, the members &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;childProcess()&lt;/span&gt;&lt;span lang="EN-US"&gt;, defining the child       process' actions and &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;parentProcess()&lt;/span&gt;&lt;span lang="EN-US"&gt;, defining the parent process' actions we defined as pure       virtual functions: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;virtual void childProcess() = 0;&lt;span style=""&gt;    &lt;/span&gt;// both must be implemented&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;o&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;virtual void parentProcess() = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;ul type="circle"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;In       addition, communication between parent- and child processes may use       standard streams or other facilities, like &lt;i&gt;pipes&lt;/i&gt; (cf. section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#PIPE"&gt;&lt;span style="color: blue;"&gt;20.3.3&lt;/span&gt;&lt;/a&gt;). To facilitate this inter-process       communication, derived classes &lt;i&gt;may&lt;/i&gt; implement: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul type="square"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;childRedirections()&lt;/span&gt;&lt;span lang="EN-US"&gt;: this member should be implemented if any standard stream (&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;cin, cout&lt;/span&gt;&lt;span lang="EN-US"&gt;) or &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;cerr&lt;/span&gt;&lt;span lang="EN-US"&gt; must be redirected in the &lt;i&gt;child&lt;/i&gt;        process (cf. section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#REDIRECTION"&gt;&lt;span style="color: blue;"&gt;20.3.1&lt;/span&gt;&lt;/a&gt;); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;parentRedirections()&lt;/span&gt;&lt;span lang="EN-US"&gt;: this member should be implemented if any standard stream (&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;cin, cout&lt;/span&gt;&lt;span lang="EN-US"&gt;) or &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;cerr&lt;/span&gt;&lt;span lang="EN-US"&gt; must be redirected in the &lt;i&gt;parent&lt;/i&gt;        process. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt;"&gt;&lt;span style="color: black;" lang="EN-US"&gt;Redirection of the standard streams will be necessary if parent- and child processes should communicate with each other via the standard streams. Here are their default definitions provided by the class's interface: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;virtual void childRedirections()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;virtual void parentRedirections()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 72pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;The member function &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; calls the system function &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; (Caution: since the system function &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is called by a member function having the same name, the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;::&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; scope resolution operator must be used to prevent a recursive call of the member function itself). After calling &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;::fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, depending on its return value, either &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;parentProcess()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; or &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;childProcess()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is called. Maybe redirection is necessary. &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork::fork()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;'s implementation calls &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;childRedirections()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; just before calling &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;childProcess()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, and &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;parentRedirections()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; just before calling &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;parentProcess()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include "fork.ih"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;void Fork::fork()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;if ((d_pid = ::fork()) &lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;throw "Fork::fork() failed";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;if (d_pid == 0)&lt;span style=""&gt;                 &lt;/span&gt;// childprocess has pid == 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;childRedirections();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;childProcess();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;exit(1);&lt;span style=""&gt;                    &lt;/span&gt;// we shouldn't come here:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                                        &lt;/span&gt;// childProcess() should exit&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;parentRedirections();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;parentProcess();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;In &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork.cc&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; the class's &lt;a name="an2859"&gt;&lt;/a&gt;&lt;i&gt;internal header file&lt;/i&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork.ih&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is included. This header file takes care of the inclusion of the necessary system header files, as well as the inclusion of &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fork.h&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; itself. Its implementation is: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include "fork.h"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;cstdlib&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;unistd.h&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;sys/types.h&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;sys/wait.h&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;Child processes should not return: once they have completed their tasks, they should terminate. This happens automatically when the child process performs a call to a member of the &lt;/span&gt;&lt;a name="an2860"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;exec...()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; family, but if the child itself remains active, then it must make sure that it terminates properly. A child process normally uses &lt;/span&gt;&lt;a name="an2861"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;exit()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; to terminate itself, but it should be realized that &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;exit()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; prevents the activation of destructors of objects &lt;a name="an2862"&gt;&lt;/a&gt;&lt;a name="an2863"&gt;&lt;/a&gt;defined at the same or more superficial nesting levels than the level at which &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;exit()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is called. Destructors of globally defined objects &lt;i&gt;are&lt;/i&gt; activated when &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;exit()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is used. When using &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;exit()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; to terminate &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;childProcess()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, it should either itself call a support member function defining all nested objects it needs, or it should define all its objects in a compound statement (e.g., using a &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;throw&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; block) calling &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;exit()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; beyond the compound statement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;Parent processes should normally wait for their children to complete. The terminating child processes inform their parent that they are about to terminate by sending out a &lt;a name="an2864"&gt;&lt;/a&gt;&lt;i&gt;signal&lt;/i&gt; which should be caught by their parents. If child processes terminate and their parent processes do not catch those signal then such child processes remain visible as so-called &lt;a name="an2865"&gt;&lt;/a&gt;&lt;i&gt;zombie&lt;/i&gt; processes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;If parent processes must wait for their children to complete, they may call the member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;waitForChild()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. This member returns the exit status of a child process to its parent. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;There exists a situation where the &lt;i&gt;child&lt;/i&gt; process &lt;i&gt;continues&lt;/i&gt; to live, but the &lt;i&gt;parent&lt;/i&gt; dies. In nature this happens all the time: parents tend to die before their children do. In our context (i.e. &lt;b&gt;C++&lt;/b&gt;), this is called a &lt;a name="an2866"&gt;&lt;/a&gt;&lt;i&gt;daemon&lt;/i&gt; program: the parent process dies and the child program continues to run as a child of the basic &lt;/span&gt;&lt;a name="an2867"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; process. Again, when the child eventually dies a signal is sent to its `step-parent' &lt;/span&gt;&lt;a name="an2868"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. No zombie is created here, as &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;init&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; catches the termination signals of all its &lt;a name="an2869"&gt;&lt;/a&gt;(step-) children. The construction of a daemon process is very simple, given the availability of the class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;Fork&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; (cf. section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#DAEMON"&gt;&lt;span style="color: blue;"&gt;20.3.2&lt;/span&gt;&lt;/a&gt;). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-5017496906618823233?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/5017496906618823233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=5017496906618823233' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/5017496906618823233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/5017496906618823233'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/12/fork-system-call.html' title='The `fork()&apos; system call'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-4829374916610063321</id><published>2008-12-08T17:45:00.000-08:00</published><updated>2008-12-23T03:57:26.944-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Articles'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Classes for input operations</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;link rel="themeData" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-IN&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:Batang; 	panose-1:2 3 6 0 0 1 1 1 1 1; 	mso-font-alt:바탕; 	mso-font-charset:129; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1342176593 1775729915 48 0 524447 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:1; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:variable; 	mso-font-signature:0 0 0 0 0 0;} @font-face 	{font-family:"\@Batang"; 	panose-1:2 3 6 0 0 1 1 1 1 1; 	mso-font-charset:129; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1342176593 1775729915 48 0 524447 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:Batang; 	mso-ansi-language:EN-US; 	mso-fareast-language:KO;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-fareast-font-family:Batang;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 72.0pt 72.0pt 72.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:477303066; 	mso-list-template-ids:-1826953390;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l0:level2 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:72.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:"Courier New"; 	mso-bidi-font-family:"Times New Roman";} @list l1 	{mso-list-id:591822601; 	mso-list-template-ids:-1982836618;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l2 	{mso-list-id:668288132; 	mso-list-template-ids:-1850550950;} @list l2:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l3 	{mso-list-id:1274358764; 	mso-list-template-ids:-1923846710;} @list l3:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman","serif";} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="font-size: 13.5pt; color: black;" lang="EN-US"&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a name="concrete/fdinput"&gt;&lt;/a&gt;&lt;span style="color: black;" lang="EN-US"&gt;To derive a class doing input operations from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;std::&lt;/span&gt;&lt;a name="an2784"&gt;&lt;/a&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, the class should use an input buffer of at least one character, to allow the use of the member functions &lt;/span&gt;&lt;a name="an2785"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;istream::putback()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; or &lt;/span&gt;&lt;a name="an2786"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;istream::ungetc()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. Stream classes (like &lt;/span&gt;&lt;a name="an2787"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;istream&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;) normally allow us to unget at least one character using their member functions &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;putback()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; or &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ungetc()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. This is important, as these stream classes usually interface to &lt;/span&gt;&lt;a name="an2788"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; objects. Although it is strictly speaking not necessary to implement a buffer in classes derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, using buffers in these cases is strongly advised: the implementation is very simple and straightforward, and the applicability of such classes will be greatly improved. Therefore, in all our classes &lt;a name="an2789"&gt;&lt;/a&gt;derived from the class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;i&gt;at least&lt;/i&gt; a &lt;a name="an2790"&gt;&lt;/a&gt;buffer of one character will be defined. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a name="IFDBUF"&gt;&lt;/a&gt;&lt;a name="l361"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: black;" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="color: black;" lang="EN-US"&gt;Using a one-character buffer&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;a name="concrete/fdinbuf"&gt;&lt;/a&gt;When deriving a class (e.g., &lt;/span&gt;&lt;a name="an2791"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;) from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; using a buffer of one character, at least its member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf::underflow()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; should be overridden, as this is the member to which all requests for input are eventually directed. Since a buffer is also needed, the member &lt;/span&gt;&lt;a name="an2792"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf::setg()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is used to inform the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; base class of the size of the input buffer, so that it is able to set up its input buffer pointers correctly. This will ensure that &lt;/span&gt;&lt;a name="an2793"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;eback()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, &lt;/span&gt;&lt;a name="an2794"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;gptr()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, and &lt;/span&gt;&lt;a name="an2795"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;egptr()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; return correct values. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;The required class shows the following characteristics: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Like      the class designed for output operations, this class is derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;std::&lt;/span&gt;&lt;a name="an2796"&gt;&lt;/a&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; as well: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;class ifdstreambuf: public std::streambuf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      class receives two data members, one of them a fixed-sized one character      buffer. The data members are defined as &lt;/span&gt;&lt;a name="an2797"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;protected&lt;/span&gt;&lt;span lang="EN-US"&gt; data members so that      derived classes (e.g., see section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#IFDSEEK"&gt;&lt;span style="color: blue;"&gt;20.1.2.3&lt;/span&gt;&lt;/a&gt;) can access them: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;protected:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;d_fd;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;d_buffer[1];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      constructor initializes the buffer. However, this initialization is done      so that &lt;/span&gt;&lt;a name="an2798"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;gptr()&lt;/span&gt;&lt;span lang="EN-US"&gt; will be equal to &lt;/span&gt;&lt;a name="an2799"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;egptr()&lt;/span&gt;&lt;span lang="EN-US"&gt;. Since this implies that the buffer is empty, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;underflow()&lt;/span&gt;&lt;span lang="EN-US"&gt; will immediately be      called to refill the buffer: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;ifdstreambuf(int fd)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_fd(fd)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;setg(d_buffer, d_buffer + 1, d_buffer + 1);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Finally      &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;underflow()&lt;/span&gt;&lt;span lang="EN-US"&gt; is      overridden. It will first ensure that the buffer is really empty. If not,      then the next character in the buffer is returned. If the buffer is really      empty, it is refilled by reading from the file descriptor. If this fails      (for whatever reason), &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;EOF&lt;/span&gt;&lt;span lang="EN-US"&gt; is returned. More sophisticated implementations could react      more intelligently here, of course. If the buffer could be refilled, &lt;/span&gt;&lt;a name="an2800"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;setg()&lt;/span&gt;&lt;span lang="EN-US"&gt; is called      to set up &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;'s      buffer pointers correctly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      implementations of the member functions use low-level functions to operate      the file descriptors, so apart from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; the header file &lt;/span&gt;&lt;a name="an2801"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;unistd.h&lt;/span&gt;&lt;span lang="EN-US"&gt; must have been read by the compiler before the implementations      of the member functions can be compiled. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;This completes the construction of the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; class. It is used in the following program: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;iostream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;istream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;unistd.h&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include "ifdbuf.h"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;using namespace std;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;int main(int argc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;ifdstreambuf fds(STDIN_FILENO);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;istream&lt;span style=""&gt;      &lt;/span&gt;is(&amp;amp;fds);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;cout &lt;&lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a name="IFDNBUF"&gt;&lt;/a&gt;&lt;a name="l362"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: black;" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="color: black;" lang="EN-US"&gt; Using an n-character buffer&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;a name="concrete/fdninbuf"&gt;&lt;/a&gt;How complex would things get if we would decide to use a buffer of substantial size? Not that complex. The following class allows us to specify the size of a buffer, but apart from that it is basically the same class as &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; developed in the previous section. To make things a bit more interesting, in the class &lt;/span&gt;&lt;a name="an2802"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdnstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; developed here, the member &lt;/span&gt;&lt;a name="an2803"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf::xsgetn()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is also overridden, to optimize reading of series of characters. Furthermore, a default constructor is provided which can be used in combination with the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;open()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; member to construct an &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;istream&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; object before the file descriptor becomes available. Then, once the descriptor becomes available, the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;open()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; member can be used to initiate the object's buffer. Later, in section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#FORK"&gt;&lt;span style="color: blue;"&gt;20.3&lt;/span&gt;&lt;/a&gt;, we'll encounter such a situation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;To save some space, the success of various calls was not checked. In `real life' implementations, these checks should, of course, not be omitted. The class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdnstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; has the following characteristics: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Once      again, it is derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;std::&lt;/span&gt;&lt;a name="an2804"&gt;&lt;/a&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;class ifdnstreambuf: public std::streambuf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Like      the class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;ifdbuf&lt;/span&gt;&lt;span lang="EN-US"&gt; (section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#IFDBUF"&gt;&lt;span style="color: blue;"&gt;20.1.2.1&lt;/span&gt;&lt;/a&gt;), its data members are protected.      Since the buffer's size is configurable, this size is kept in a dedicated      data member, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_bufsize&lt;/span&gt;&lt;span lang="EN-US"&gt;: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;protected:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;int&lt;span style=""&gt;         &lt;/span&gt;d_fd;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;unsigned&lt;span style=""&gt;    &lt;/span&gt;d_bufsize;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;char*&lt;span style=""&gt;       &lt;/span&gt;d_buffer;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      default constructor does not allocate a buffer, and can be used to      construct an object before the file descriptor becomes known. A second      constructor simply passes its arguments to &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;open()&lt;/span&gt;&lt;span lang="EN-US"&gt; which will then initialize the object so that it can actually      be used: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;ifdnstreambuf()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_bufsize(0),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_buffer(0)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;ifdnstreambuf(int fd, unsigned bufsize = 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;open(fd, bufsize);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;If      the object has been initialized by &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;open()&lt;/span&gt;&lt;span lang="EN-US"&gt;, its destructor will both delete the object's buffer and use      the file descriptor to close the device: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;~ifdnstreambuf()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (d_bufsize)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;close(d_fd);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;delete[] d_buffer;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;open()&lt;/span&gt;&lt;span lang="EN-US"&gt; member simply allocates the      object's buffer. It is assumed that the calling program has already opened      the device. Once the buffer has been allocated, the base class member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;setg()&lt;/span&gt;&lt;span lang="EN-US"&gt; is used to ensure that &lt;/span&gt;&lt;a name="an2805"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;eback()&lt;/span&gt;&lt;span lang="EN-US"&gt;, &lt;/span&gt;&lt;a name="an2806"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;gptr()&lt;/span&gt;&lt;span lang="EN-US"&gt;, and &lt;/span&gt;&lt;a name="an2807"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;egptr()&lt;/span&gt;&lt;span lang="EN-US"&gt; return      correct values: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;void open(int fd, unsigned bufsize = 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_fd = fd;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_bufsize = bufsize;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_buffer = new char[d_bufsize];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;setg(d_buffer, d_buffer + d_bufsize, d_buffer + d_bufsize);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      overridden member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;underflow()&lt;/span&gt;&lt;span lang="EN-US"&gt; is implemented almost identically to &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;ifdstreambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;'s (section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#IFDBUF"&gt;&lt;span style="color: blue;"&gt;20.1.2.1&lt;/span&gt;&lt;/a&gt;) member. The only difference is      that the current class supports a buffer of larger sizes. Therefore, more      characters (up to &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_bufsize&lt;/span&gt;&lt;span lang="EN-US"&gt;) may be read from the device at once: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;int underflow()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;if (gptr() &lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;return *gptr();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;int nread = read(d_fd, d_buffer, d_bufsize);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (nread &lt;= 0)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;return EOF;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;setg(d_buffer, d_buffer, d_buffer + nread);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style=""&gt;            &lt;/span&gt;return *gptr();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Finally      &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;xsgetn()&lt;/span&gt;&lt;span lang="EN-US"&gt; is overridden.      In a loop, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;n&lt;/span&gt;&lt;span lang="EN-US"&gt; is reduced      until 0, at which point the function terminates. Alternatively, the member      returns if &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;underflow()&lt;/span&gt;&lt;span lang="EN-US"&gt;      fails to obtain more characters. This member optimizes the reading of      series of characters: instead of calling &lt;/span&gt;&lt;a name="an2808"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf::sbumpc()&lt;/span&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;n&lt;/span&gt;&lt;span lang="EN-US"&gt; times, a block of &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;avail&lt;/span&gt;&lt;span lang="EN-US"&gt; characters is copied to the      destination, using &lt;/span&gt;&lt;a name="an2809"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf::gpumb()&lt;/span&gt;&lt;span lang="EN-US"&gt; to consume &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;avail&lt;/span&gt;&lt;span lang="EN-US"&gt; characters from the buffer using one function call: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;std::streamsize xsgetn(char *dest, std::streamsize n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;int nread = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;while (n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;if (!in_avail())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;if (underflow() == EOF)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&lt;span style=""&gt;            &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;int avail = in_avail();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;if (avail &gt; n)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;avail = n;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;memcpy(dest + nread, gptr(), avail);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;gbump(avail);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;              &lt;/span&gt;nread += avail;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;n -= avail;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;return nread;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      implementations of the member functions use low-level functions to operate      the file descriptors. So apart from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; the header file &lt;/span&gt;&lt;a name="an2810"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;unistd.h&lt;/span&gt;&lt;span lang="EN-US"&gt; must have been read by the compiler before the implementations      of the member functions can be compiled. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;The member function &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;xsgetn()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is called by &lt;/span&gt;&lt;a name="an2811"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf::sgetn()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, which is a &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; member. The following example illustrates the use of this member function with a &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdnstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; object: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;unistd.h&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;iostream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;istream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include "ifdnbuf.h"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;using namespace std;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;int main(int argc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                                    &lt;/span&gt;// internally: 30 char buffer&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;ifdnstreambuf fds(STDIN_FILENO, 30);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;char buf[80];&lt;span style=""&gt;               &lt;/span&gt;// main() reads blocks of 80&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                                    &lt;/span&gt;// chars&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;while (true)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;unsigned n = fds.sgetn(buf, 80);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;if (n == 0)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;cout.write(buf, n);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a name="IFDSEEK"&gt;&lt;/a&gt;&lt;a name="l363"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: black;" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="color: black;" lang="EN-US"&gt; Seeking positions in `streambuf' objects&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;a name="concrete/fdinseek"&gt;&lt;/a&gt;When devices support &lt;i&gt;seek operations&lt;/i&gt;, classes derived from &lt;/span&gt;&lt;a name="an2812"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; should override te members &lt;/span&gt;&lt;a name="an2813"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf::seekoff()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; and &lt;/span&gt;&lt;a name="an2814"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf::seekpos()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. The class &lt;/span&gt;&lt;a name="an2815"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdseek&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, developed in this section, can be used to read information from devices supporting such seek operations. The class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdseek&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; was derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, so it uses a character buffer of just one character. The facilities to perform seek operations, which are added to our new class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdseek&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, will make sure that the input buffer is reset when a seek operation is requested. The class could also be derived from the class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdnstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;; in which case, the arguments to reset the input buffer must be adapted in such a way that its second and third parameters point beyond the available input buffer. Let's have a look at the characteristics of &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdseek&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;As      mentioned, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;ifdseek&lt;/span&gt;&lt;span lang="EN-US"&gt; is      derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;ifdstreambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;.      Like the latter class, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;ifdseek&lt;/span&gt;&lt;span lang="EN-US"&gt;'s member functions use facilities declared in &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;unistd.h&lt;/span&gt;&lt;span lang="EN-US"&gt;. So, the compiler must      have seen &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;unistd.h&lt;/span&gt;&lt;span lang="EN-US"&gt; before      it can compile the class's members functions. The class interface itself      starts with: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;class ifdseek: public ifdstreambuf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;To      reduce the amount of typing when specifying types and constants from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;std::streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; and &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;std::ios&lt;/span&gt;&lt;span lang="EN-US"&gt;, several &lt;/span&gt;&lt;a name="an2816"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;typedef&lt;/span&gt;&lt;span lang="EN-US"&gt;s are      defined at the class's very top: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;typedef std::streambuf::pos_type&lt;span style=""&gt;        &lt;/span&gt;pos_type;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;typedef std::streambuf::off_type&lt;span style=""&gt;        &lt;/span&gt;off_type;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;typedef std::ios::seekdir&lt;span style=""&gt;               &lt;/span&gt;seekdir;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;typedef std::ios::openmode&lt;span style=""&gt;              &lt;/span&gt;openmode;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="color: black;" lang="EN-US"&gt;These typedefs refer to types that are defined in the header file &lt;/span&gt;&lt;a name="an2817"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ios&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, which must therefore be included as well before the compiler reads &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdseek&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;'s class definition. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      class is given a rather basic implementation. The only required      constructor expects the device's &lt;a name="an2818"&gt;&lt;/a&gt;file descriptor. It      has no special tasks to perform and only needs to call its &lt;a name="an2819"&gt;&lt;/a&gt;base      class constructor: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;ifdseek(int fd)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;ifdstreambuf(fd)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;seek_off()&lt;/span&gt;&lt;span lang="EN-US"&gt; is      responsible for performing the actual seek operations. It calls &lt;/span&gt;&lt;a name="an2820"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;lseek()&lt;/span&gt;&lt;span lang="EN-US"&gt; to seek      a new position in a device whose file descriptor is known. If seeking      succeeds, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;setg()&lt;/span&gt;&lt;span lang="EN-US"&gt; is called      to define an already empty buffer, so that the base class's &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;underflow()&lt;/span&gt;&lt;span lang="EN-US"&gt; member will refill the      buffer at the next input request. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;pos_type seekoff(off_type offset, seekdir dir, openmode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;pos_type pos =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;lseek&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;d_fd, offset,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;(dir ==&lt;span style=""&gt;  &lt;/span&gt;std::ios::beg) ? SEEK_SET :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;(dir ==&lt;span style=""&gt;  &lt;/span&gt;std::ios::cur) ? SEEK_CUR :&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                                               &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;SEEK_END&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (pos &lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;return -1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;setg(d_buffer, d_buffer + 1, d_buffer + 1);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;return pos;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Finally,      the companion function &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;seekpos&lt;/span&gt;&lt;span lang="EN-US"&gt; is overridden as well: it is actually defined as a call to &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;seekoff()&lt;/span&gt;&lt;span lang="EN-US"&gt;: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;pos_type seekpos(pos_type offset, openmode mode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;return seekoff(offset, std::ios::beg, mode);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;An example of a program using the class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ifdseek&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is the following. If this program is given its own source file using input &lt;a name="an2821"&gt;&lt;/a&gt;redirection then seeking is supported, and with the exception of the first line, every other line is shown twice: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include "fdinseek.h"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;string&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;iostream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;istream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;iomanip&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;using namespace std;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;int main(int argc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;ifdseek fds(0);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;istream is(&amp;amp;fds);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;string&lt;span style=""&gt;  &lt;/span&gt;s;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;while (true)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;if (!getline(is, s))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;streampos pos = is.tellg();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;cout &lt;&lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;if (!getline(is, s))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;streampos pos2 = is.tellg();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;cout &lt;&lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;if (!is.seekg(pos))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;cout &lt;&lt; "Seek failed\n";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a name="l364"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="color: black;" lang="EN-US"&gt;20.1.2.4: Multiple `unget()' calls in `streambuf' objects&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;a name="concrete/fdunget"&gt;&lt;/a&gt;As mentioned before, &lt;/span&gt;&lt;a name="an2822"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; classes and classes derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; should support &lt;i&gt;at least&lt;/i&gt; ungetting the last read character. Special care must be taken when &lt;i&gt;series&lt;/i&gt; of &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;unget()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; calls must be supported. In this section the construction of a class supporting a configurable number of &lt;/span&gt;&lt;a name="an2823"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;istream::unget()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; or &lt;/span&gt;&lt;a name="an2824"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;istream::putback()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; calls. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;Support for multiple (say `&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;n&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;') &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;unget()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; calls is realized by reserving an initial section of the input buffer, which is gradually filled up to contain the last &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;n&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; characters read. The class was implemented as follows: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Once      again, the class is derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;std::&lt;/span&gt;&lt;a name="an2825"&gt;&lt;/a&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;. It defines several data members, allowing the class to      perform the bookkeeping required to maintain an unget-buffer of a      configurable size: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;class fdunget: public std::streambuf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;int&lt;span style=""&gt;         &lt;/span&gt;d_fd;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;unsigned&lt;span style=""&gt;    &lt;/span&gt;d_bufsize;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;unsigned&lt;span style=""&gt;    &lt;/span&gt;d_reserved;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;char*&lt;span style=""&gt;       &lt;/span&gt;d_buffer;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;char*&lt;span style=""&gt;       &lt;/span&gt;d_base;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      class's constructor expects a &lt;a name="an2826"&gt;&lt;/a&gt;file descriptor, a buffer      size and the number of characters that can be ungot or pushed back as its      arguments. This number determines the size of a &lt;i&gt;reserved&lt;/i&gt; area,      defined as the first &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_reserved&lt;/span&gt;&lt;span lang="EN-US"&gt; bytes of the class's input buffer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul type="circle"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The       input buffer will always be at least one byte larger than &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_reserved&lt;/span&gt;&lt;span lang="EN-US"&gt;. So, a certain number       of bytes may be read. Then, once &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;reserved&lt;/span&gt;&lt;span lang="EN-US"&gt; bytes have been read at least &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;reserved&lt;/span&gt;&lt;span lang="EN-US"&gt; bytes can be ungot. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Next,       the starting point for reading operations is configured: it is called &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_base&lt;/span&gt;&lt;span lang="EN-US"&gt;, pointing to a location &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;reserved&lt;/span&gt;&lt;span lang="EN-US"&gt; bytes from the start of &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_buffer&lt;/span&gt;&lt;span lang="EN-US"&gt;. This will always be the       point where the buffer refills start. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Now       that the buffer has been constructed, we're ready to define &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;'s buffer pointers using &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;setg()&lt;/span&gt;&lt;span lang="EN-US"&gt;. As no characters have been       read yet, all pointers are set to point to &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_base&lt;/span&gt;&lt;span lang="EN-US"&gt;. If &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;unget()&lt;/span&gt;&lt;span lang="EN-US"&gt; is called at this point, no characters are available, so &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;unget()&lt;/span&gt;&lt;span lang="EN-US"&gt; will (correctly) fail. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Eventually,       the refill buffer's size is determined as the number of allocated bytes       minus the size of the reserved area. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="color: black;" lang="EN-US"&gt;Here is the class's constructor: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;fdunget (int fd, unsigned bufsz, unsigned unget)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_fd(fd),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_reserved(unget)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unsigned allocate =&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;bufsz &gt; d_reserved ?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                            &lt;/span&gt;bufsz&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style=""&gt;                       &lt;/span&gt;d_reserved + 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_buffer = new char [allocate];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_base = d_buffer + d_reserved;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;setg(d_base, d_base, d_base);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_bufsize = allocate - d_reserved;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      class's destructor simply returns the memory allocated for the buffer to      the common pool: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;~fdunget()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;delete[] d_buffer;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Finally,      &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;underflow()&lt;/span&gt;&lt;span lang="EN-US"&gt; is      overridden. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul type="circle"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Firstly,       the standard check to determine whether the buffer is really empty is       applied. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;If       empty, it determines the number of characters that could potentially be       ungot. At this point, the input buffer is exhausted. So this value may be       any value between 0 (the initial state) or the input buffer's size (when       the reserved area has been filled up completely, and all current       characters in the remaining section of the buffer have also been read). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Next       the number of bytes to move into the reserved area is computed. This       number is at most &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_reserved&lt;/span&gt;&lt;span lang="EN-US"&gt;, but it is equal to the actual number of characters that can       be ungot if this value is smaller. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Now       that the number of characters to move into the reserved area is known,       this number of characters is moved from the input buffer's end to the       area immediately before &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_base&lt;/span&gt;&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Then       the buffer is refilled. This all is standard, but notice that reading       starts from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_base&lt;/span&gt;&lt;span lang="EN-US"&gt; and not       from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_buffer&lt;/span&gt;&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Finally,       &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;'s read       buffer pointers are set up. &lt;/span&gt;&lt;a name="an2827"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;Eback()&lt;/span&gt;&lt;span lang="EN-US"&gt; is set to &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;move&lt;/span&gt;&lt;span lang="EN-US"&gt; locations before &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_base&lt;/span&gt;&lt;span lang="EN-US"&gt;, thus defining the guaranteed unget-area, &lt;/span&gt;&lt;a name="an2828"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;gptr()&lt;/span&gt;&lt;span lang="EN-US"&gt; is set       to &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;d_base&lt;/span&gt;&lt;span lang="EN-US"&gt;, since       that's the location of the first read character after a refill, and &lt;/span&gt;&lt;a name="an2829"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;egptr()&lt;/span&gt;&lt;span lang="EN-US"&gt; is set       just beyond the location of the last character read into the buffer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="color: black;" lang="EN-US"&gt;Here is &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;underflow()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;'s implementation: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;int underflow()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (gptr() &lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;return *gptr();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unsigned ungetsize = gptr() - eback();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unsigned move = std::min(ungetsize, d_reserved);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;memcpy(d_base - move, egptr() - move, move);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;int nread = read(d_fd, d_base, d_bufsize);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (nread &lt;= 0)&lt;span style=""&gt;       &lt;/span&gt;// none read -&gt; return EOF&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;return EOF;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;setg(d_base - move, d_base, d_base + nread);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;span style=""&gt;         &lt;/span&gt;return *gptr();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;The following program illustrates the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;class fdunget&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. It reads at most 10 characters from the standard input, stopping at &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;EOF&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;. A guaranteed unget-buffer of 2 characters is defined in a buffer holding 3 characters. Just before reading a character, the program tries to unget at most 6 characters. This is, of course, not possible; but the program will nicely unget as many characters as possible, considering the actual number of characters read: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include "fdunget.h"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;string&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;iostream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;istream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;using namespace std;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;int main(int argc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;fdunget fds(0, 3, 2);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;istream is(&amp;amp;fds);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;c;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;for (int idx = 0; idx &lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;cout &lt;&lt; "after reading " &lt;&lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;for (int ug = 0; ug &lt;= 6; ++ug)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (!is.unget())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;cout&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;&lt;&lt; "\tunget failed at attempt " &lt;&lt; (ug + 1) &lt;&lt; "\n"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;&lt;&lt; "\trereading: '";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;is.clear();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;while (ug--)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;is.get(c);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;cout &lt;&lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;cout &lt;&lt; "'\n";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;if (!is.get(c))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;cout &lt;&lt; " reached\n";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;cout &lt;&lt; "Next character: " &lt;&lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;/*&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;Generated output after 'echo abcde | program':&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;after reading 0 characters:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unget failed at attempt 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;rereading: ''&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;Next character: a&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;after reading 1 characters:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unget failed at attempt 2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;rereading: 'a'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;Next character: b&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;after reading 2 characters:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unget failed at attempt 3&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;rereading: 'ab'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;Next character: c&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;after reading 3 characters:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;               &lt;/span&gt;unget failed at attempt 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;rereading: 'abc'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;Next character: d&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;after reading 4 characters:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unget failed at attempt 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;rereading: 'bcd'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;Next character: e&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;after reading 5 characters:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unget failed at attempt 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;rereading: 'cde'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;Next character:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;after reading 6 characters:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;unget failed at attempt 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;rereading: 'de&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;'&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;         &lt;/span&gt;reached&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;*/&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-4829374916610063321?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/4829374916610063321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=4829374916610063321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4829374916610063321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/4829374916610063321'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/12/classes-for-input-operations.html' title='Classes for input operations'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-5229933127524875717</id><published>2008-12-08T17:44:00.000-08:00</published><updated>2008-12-23T03:57:26.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Articles'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Classes for output operations</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;link rel="themeData" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CUsers%5Csujata%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-IN&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;    &lt;w:usefelayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:Batang; 	panose-1:2 3 6 0 0 1 1 1 1 1; 	mso-font-alt:바탕; 	mso-font-charset:129; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1342176593 1775729915 48 0 524447 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:1; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:variable; 	mso-font-signature:0 0 0 0 0 0;} @font-face 	{font-family:"\@Batang"; 	panose-1:2 3 6 0 0 1 1 1 1 1; 	mso-font-charset:129; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1342176593 1775729915 48 0 524447 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:Batang; 	mso-ansi-language:EN-US; 	mso-fareast-language:KO;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-fareast-font-family:Batang;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 72.0pt 72.0pt 72.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:592058079; 	mso-list-template-ids:661291828;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l1 	{mso-list-id:2125071679; 	mso-list-template-ids:-766844452;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman","serif";} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="font-size: 13.5pt; color: black;" lang="EN-US"&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a name="concrete/fdout"&gt;&lt;/a&gt;&lt;span style="color: black;" lang="EN-US"&gt;Extensions to the &lt;a name="an2761"&gt;&lt;/a&gt;ANSI/ISO standard may be available allowing us to read from and/or write to &lt;a name="an2762"&gt;&lt;/a&gt;&lt;i&gt;file descriptors&lt;/i&gt;. However, such extensions are not standard, and may thus vary or be unavailable across compilers and/or compiler versions. On the other hand, a file descriptor can be considered a &lt;a name="an2763"&gt;&lt;/a&gt;device. So it seems natural to use the class &lt;/span&gt;&lt;a name="an2764"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; as the starting point for constructing classes interfacing file descriptors. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;In this section we will construct classes which may be used to write to a device identified by a file descriptor: it may be a file, but it could also be a &lt;a name="an2765"&gt;&lt;/a&gt;pipe or &lt;a name="an2766"&gt;&lt;/a&gt;socket. Section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#STRBUF"&gt;&lt;span style="color: blue;"&gt;20.1.2&lt;/span&gt;&lt;/a&gt; discusses reading from devices given their file descriptors, while section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#REDIRECTION"&gt;&lt;span style="color: blue;"&gt;20.3.1&lt;/span&gt;&lt;/a&gt; reconsiders redirection, discussed earlier in section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus05.html#REDIR"&gt;&lt;span style="color: blue;"&gt;5.8.3&lt;/span&gt;&lt;/a&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;Basically, deriving a class for &lt;a name="an2767"&gt;&lt;/a&gt;output operations is simple. The only member function that &lt;i&gt;must&lt;/i&gt; be overridden is the &lt;/span&gt;&lt;a name="an2768"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;virtual&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;int overflow(int c)&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; &lt;a name="an2769"&gt;&lt;/a&gt;. This member is responsible for writing characters to the device once the class's buffer is full. If &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;fd&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is a file descriptor to which information may be written, and if we decide against using a buffer then the member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;overflow()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; can simply be: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;class UnbufferedFD: public std::streambuf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;public:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;int overflow(int c)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (c != EOF)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;if (write(fd, &amp;amp;c, 1) != 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                        &lt;/span&gt;return EOF;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;return c;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;The argument received by &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;overflow()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is either written as a value of type &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;char&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; to the file descriptor, or &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;EOF&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is returned. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;This simple function does not use an output buffer. As the use of a buffer is strongly advised (see also the next section), the construction of a class using an output buffer will be discussed next in somewhat greater detail. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;When an output buffer is used, the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;overflow()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; member will be a bit more complex, as it is now only called when the buffer is full. Once the buffer is full, we &lt;i&gt;first&lt;/i&gt; have to flush the buffer, for which the (virtual) function &lt;/span&gt;&lt;a name="an2770"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf::sync()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is available. Since &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;sync()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is a virtual function, classes derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;std::streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; may redefine &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;sync()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; to flush a buffer &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;std::streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; itself doesn't know about. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;Overriding &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;sync()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; and using it in &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;overflow()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; is not all that must be done: eventually we might have less information than fits into the buffer. So, at the end of the &lt;a name="an2771"&gt;&lt;/a&gt;lifetime of our special &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; object, its buffer might only be partially full. Therefore, we must make sure that the buffer is flushed once our object goes &lt;a name="an2772"&gt;&lt;/a&gt;out of scope. This is of course very simple: &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;sync()&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; should be called by the &lt;a name="an2773"&gt;&lt;/a&gt;destructor as well. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: black;" lang="EN-US"&gt;Now that we've considered the consequences of using an output buffer, we're almost ready to construct our derived class. We will add a couple of additional features, though. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;First,      we should allow the user of the class to specify the size of the output      buffer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Second,      it should be possible to construct an object of our class before the file      descriptor is actually known. Later, in section &lt;a href="http://www.icce.rug.nl/documents/cplusplus/cplusplus20.html#FORK"&gt;&lt;span style="color: blue;"&gt;20.3&lt;/span&gt;&lt;/a&gt; we'll encounter a situation where this      feature will be used. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;In order to save some space, the successful operation of the various functions were not checked. In `real life' implementations these checks should of course not be omitted. Our class &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ofdnstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; has the following characteristics: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      class itself is derived from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;std::streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;class ofdnstreambuf: public std::streambuf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;It      uses three data members, keeping track of the size of the buffer, the file      descriptor and the buffer itself: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;unsigned d_bufsize;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;d_fd;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;*d_buffer;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Its      default constructor merely initializes the buffer to 0. Slightly more      interesting is its constructor expecting a filedescriptor and a buffer      size: it simply passes its arguments on to the class's &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;open()&lt;/span&gt;&lt;span lang="EN-US"&gt; member (see below). Here are      the constructors: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;ofdnstreambuf()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_bufsize(0),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_buffer(0)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;ofdnstreambuf(int fd, unsigned bufsize = 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;open(fd, bufsize);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      destructor calls the overridden function &lt;/span&gt;&lt;a name="an2774"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;sync()&lt;/span&gt;&lt;span lang="EN-US"&gt;, writing any characters      stored in the output buffer to the device. If there's no buffer, the      destructor needs to perform no actions: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;~ofdnstreambuf()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (d_buffer)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;             &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;sync();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;delete[] d_buffer;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;open()&lt;/span&gt;&lt;span lang="EN-US"&gt; member initializes the      buffer. Using &lt;/span&gt;&lt;a name="an2775"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;setp()&lt;/span&gt;&lt;span lang="EN-US"&gt;, the begin and end points of the buffer are set. This is used      by the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; base      class to initialize &lt;/span&gt;&lt;a name="an2776"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;pbase()&lt;/span&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;a name="an2777"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;pptr()&lt;/span&gt;&lt;span lang="EN-US"&gt; and &lt;/span&gt;&lt;a name="an2778"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;epptr()&lt;/span&gt;&lt;span lang="EN-US"&gt;: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;void open(int fd, unsigned bufsize = 1)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_fd = fd;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_bufsize = bufsize == 0 ? 1 : bufsize;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;d_buffer = new char[d_bufsize];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;setp(d_buffer, d_buffer + d_bufsize);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;sync()&lt;/span&gt;&lt;span lang="EN-US"&gt; will      write any not yet flushed characters in the buffer to the device. Next,      the buffer is reinitialized using &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;setp()&lt;/span&gt;&lt;span lang="EN-US"&gt;. Note that &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;sync()&lt;/span&gt;&lt;span lang="EN-US"&gt; returns 0 after a successful flush operation: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;int sync()&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (pptr() &gt; pbase())&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;write(d_fd, d_buffer, pptr() - pbase());&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;setp(d_buffer, d_buffer + d_bufsize);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;return 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;Finally,      the member &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;overflow()&lt;/span&gt;&lt;span lang="EN-US"&gt; is &lt;a name="an2779"&gt;&lt;/a&gt;overridden. Since this member is called from the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; base class when the      buffer is full, &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;sync()&lt;/span&gt;&lt;span lang="EN-US"&gt; is called first to flush the filled up buffer to the device.      As this recreates an empty buffer, the character &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;c&lt;/span&gt;&lt;span lang="EN-US"&gt; which could not be written to the buffer by the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; base class is now entered      into the buffer using the member functions &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;pptr()&lt;/span&gt;&lt;span lang="EN-US"&gt; and &lt;/span&gt;&lt;a name="an2780"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;pbump()&lt;/span&gt;&lt;span lang="EN-US"&gt;. Notice that entering a character into the buffer is realized      using available &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; member functions, rather than doing it `by hand', which might      invalidate &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt;'s      internal bookkeeping: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;int overflow(int c)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;sync();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;if (c != EOF)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;*pptr() = c;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;pbump(1);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;return c;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 10pt; font-family: Symbol; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type="disc"&gt;&lt;li class="MsoNormal" style="color: black;"&gt;&lt;span lang="EN-US"&gt;The      member function implementations use low-level functions to operate on the      file descriptors. So apart from &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;streambuf&lt;/span&gt;&lt;span lang="EN-US"&gt; the header file &lt;/span&gt;&lt;a name="an2781"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;unistd.h&lt;/span&gt;&lt;span lang="EN-US"&gt; must have been read by the compiler before the implementations      of the member functions can be compiled. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: black;" lang="EN-US"&gt;Depending on the &lt;i&gt;number&lt;/i&gt; of arguments, the following program uses the &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;ofdstreambuf&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt; class to copy its standard input to file descriptor &lt;/span&gt;&lt;a name="an2782"&gt;&lt;/a&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;STDOUT_FILENO&lt;/span&gt;&lt;span style="color: black;" lang="EN-US"&gt;, which is the &lt;a name="an2783"&gt;&lt;/a&gt;symbolic name of the file descriptor used for the standard output. Here is the program: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;string&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;iostream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include &lt;istream&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#include "fdout.h"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;using namespace std;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;int main(int argc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;ofdnstreambuf&lt;span style=""&gt;   &lt;/span&gt;fds(STDOUT_FILENO, 500);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;ostream&lt;span style=""&gt;         &lt;/span&gt;os(&amp;amp;fds);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;switch (argc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;case 1:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;os &lt;&lt; "COPYING cin LINE BY LINE\n";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;for (string&lt;span style=""&gt;  &lt;/span&gt;s; getline(cin, s); )&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;os &lt;&lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;case 2:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;os &lt;&lt; "COPYING cin BY EXTRACTING TO os.rdbuf()\n";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;cin &gt;&gt; os.rdbuf();&lt;span style=""&gt;      &lt;/span&gt;// Alternatively, use:&lt;span style=""&gt;  &lt;/span&gt;cin &gt;&gt; &amp;fds;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;case 3:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;os &lt;&lt; "COPYING cin BY INSERTING cin.rdbuf() into os\n";&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;os &lt;&lt;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;break;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-5229933127524875717?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/5229933127524875717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=5229933127524875717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/5229933127524875717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/5229933127524875717'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/12/classes-for-output-operations.html' title='Classes for output operations'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-8642930514749552873</id><published>2008-12-04T20:54:00.000-08:00</published><updated>2008-12-23T03:57:26.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Articles'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Memory Leaks</title><content type='html'>&lt;span style="font-family:Arial;font-size:100%;"&gt;&lt;b&gt;Memory Leaks&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Arrays always allocate  memory statically, i.e. during compilation. As a result the desired generality  may not be obtained in the program that uses an array. To avoid this it is  common practice in software engineering to dynamically allocate memory from the  heap for use by a program. In C and C++ once allocated it is not binding on part  of the program to release this memory when it is no longer needed. When a  program fails to do so, i.e. it does not return the allocated memory to the  operating system, the memory chunk remains allocated but we are unable to access  it. Losing memory in this manner is often known as a memory leak. In this  article I would highlight the common causes of memory leakages while programming  in C++. The discussion is independent of the operating  system.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;&lt;b&gt;Cause no.1: Not using a delete  at all:&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Often one forgets to use the  delete operator on memory that one has dynamically allocated with the new  operator. However, once you grow knee high in C++ you would almost always avoid  such memory leaks.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;&lt;b&gt;Cause no.2: Multiple  exits in a function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Ideally there  should be only one exit point in a function. It is however easier to preach this  than practice it diligently. If you are using multiple returns in a function it  might lead to an exit from the function before dynamically-allocated memory is  freed. Here is a program to illustrate the point:&lt;br /&gt;&lt;br /&gt;int func ( node *p  )&lt;br /&gt;{&lt;br /&gt;if ( p == NULL )&lt;br /&gt;return ( false ) ;&lt;br /&gt;&lt;br /&gt;node *ptrtonode = new  node ;&lt;br /&gt;&lt;br /&gt;if ( ptrtonode == NULL )&lt;br /&gt;return ( false ) ;&lt;br /&gt;&lt;br /&gt;switch (  ptrtonode -&gt; performance() )&lt;br /&gt;{&lt;br /&gt;case FIRST :&lt;br /&gt;promote ( 1 )  ;&lt;br /&gt;return ( true ) ;&lt;br /&gt;case SECOND :&lt;br /&gt;promote ( 2 ) ;&lt;br /&gt;return ( true )  ;&lt;br /&gt;default:&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;delete ptrtonode ;&lt;br /&gt;&lt;br /&gt;return ( false )  ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;As can be observed from the above code fragment, we have possibly  saved a few clock cycles by not using a local Boolean variable to keep track of  success or failure. We haven't used a local variable because whenever our code  encountered an error it just returned to the calling function. However, if the  performance is &lt;b&gt;FIRST&lt;/b&gt; or &lt;b&gt;SECOND&lt;/b&gt; the memory that portioned points to  never gets deleted.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;&lt;b&gt;Cause No.3: Using  several pointers with the same name&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;It's common knowledge that C++ allows and encourages a programmer  to declare an automatic variable close to the point of usage. Sometimes this  principle might land you into trouble. Using this rule we may declare an  automatic variable that will point to a quantity of allocated memory right at  the place of allocation. Suppose we have declared a pointer at the start of a  function (in the traditional manner) and another pointer with the same name  within an inner scope, at the point of instantiation. This is likely to cause a  memory leak. Here is an example program:&lt;br /&gt;&lt;br /&gt;void change shape ( int shape  )&lt;br /&gt;{&lt;br /&gt;node *ptrtonode = NULL ;&lt;br /&gt;if ( is valid ( shape ) != false  )&lt;br /&gt;{&lt;br /&gt;node *ptrtonode = new node ;&lt;br /&gt;ptrtonode-&gt;newshape ( shape )  ;&lt;br /&gt;}&lt;br /&gt;// which ptrtonode is this?&lt;br /&gt;delete ptrtonode ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;In this  code fragment two node pointers called &lt;b&gt;ptrtonode&lt;/b&gt; are declared. The one  inside the if statement points to an instance of a node object which is never  deleted. The &lt;b&gt;ptrtonode&lt;/b&gt; that does get deleted is null at the time of  deletion. C++ guarantees that deleting a null pointer is harmless. Thus, a  memory error detection tool may not flag this deletion as an error because it is  a valid operation. A quick glance at the above function makes you think  &lt;b&gt;ptrtonode&lt;/b&gt; gets deleted, so there seems to be no problem. Whereas in  actuality this might cause a serious memory leak.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;&lt;b&gt;Cause no. 4: Using delete on an Array&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;If we allocate an array with the array new operator (new[]) and  then release the memory with the plain old delete operator it would result into  a memory leak. For example:&lt;br /&gt;&lt;br /&gt;char *ptr ;&lt;br /&gt;ptr = new char[100];&lt;br /&gt;delete  ptr ; // NOT delete[] ptr ;&lt;br /&gt;&lt;br /&gt;If you use the delete operator (and not the  delete[] operator) to release an object that was allocated with new[], the  resulting behavior is undefined. Even if you get away with this operation now it  is likely to cause trouble later, or it may simply leak the  memory.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;&lt;b&gt;Cause no. 5: Using careless  Polymorphism&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;In C++ the destructors  are not inherited. In C++, it is possible and in fact highly desirable to store  the address of a derived-class object as a pointer to its base class. You get  polymorphic behavior by referencing this derived class object through the base  class pointer. The following program instantiates a derived-class object and  stores the address as a pointer to its base class:&lt;br /&gt;&lt;br /&gt;#include&lt;br /&gt;class  Base&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;Base();&lt;br /&gt;~Base();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class Derived : public  Base&lt;br /&gt;{&lt;br /&gt;protected;&lt;br /&gt;char  *pBuf;&lt;br /&gt;public:&lt;br /&gt;Derived();&lt;br /&gt;~Derived();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Base ::  Base()&lt;br /&gt;{&lt;br /&gt;cout &lt;&lt; "Base::Base()" &lt;&lt; endl  ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Derived::Derived() : Base()&lt;br /&gt;{&lt;br /&gt;pBuf = new char [100];&lt;br /&gt;cout  &lt;&lt; "Derived :: ~Derived()" &lt;&lt; endl ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Derived ::  ~Derived()&lt;br /&gt;{&lt;br /&gt;delete[] pBuf ;&lt;br /&gt;cout &lt;&lt; "Derived :: ~Derived()"  &lt;&lt; endl ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;Base *pobject = new Derived()  ;&lt;br /&gt;delete pobject ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;On execution this program produces the  following  output:&lt;br /&gt;&lt;br /&gt;Base::Base()&lt;br /&gt;Derived::Derived()&lt;br /&gt;Base::~Base()&lt;br /&gt;&lt;br /&gt;Note  that the destructor for the derived class did not get called. This would leak  the buffer pBuf since it was allocated in the Derived constructor. To overcome  this, simply declare the destructor of the Base class as a virtual function, as  in:&lt;br /&gt;&lt;br /&gt;class Base&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;Base():&lt;br /&gt;virtual ~Base();&lt;br /&gt;}  ;&lt;br /&gt;&lt;br /&gt;The output of the program would now  be:&lt;br /&gt;&lt;br /&gt;Base::Base()&lt;br /&gt;Derived::Derived()&lt;br /&gt;Derived::~Derived()&lt;br /&gt;Base::~Base()&lt;br /&gt;&lt;br /&gt;Now  the Derived class destructor is called, and &lt;b&gt;Derived::pBuf&lt;/b&gt; is deleted.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-8642930514749552873?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/8642930514749552873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=8642930514749552873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/8642930514749552873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/8642930514749552873'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/12/memory-leaks.html' title='Memory Leaks'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-606273334152082787</id><published>2008-12-04T20:52:00.001-08:00</published><updated>2008-12-23T03:57:26.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++ Articles'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ Templates</title><content type='html'>&lt;span style="font-family:Arial;font-size:85%;"&gt;Templates is an important addition in C++ when compared  with C. Lot of readers have been sending queries about templates. I would try to  explain a majority of them here in a question-answer form. The questions have  been suitably modified to address a general audience.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;What are templates?&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;Templates are a mechanism for generating functions and classes based  on type parameters (templates are sometimes called "parameterised types"). By  using templates, you can design a single class that operates on data of many  types, instead of having to create a separate class for each type. For example,  to create a type-safe function that returns the minimum of two parameters  without using templates, you would have to write a set of overloaded functions  like this:&lt;br /&gt;&lt;br /&gt;// min for ints&lt;br /&gt;int min( int a, int b )&lt;br /&gt;{&lt;br /&gt;    return  ( a &lt; b ) ? a : b ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// min for longs&lt;br /&gt;long min( long a, long b  )&lt;br /&gt;{&lt;br /&gt;    return ( a &lt; b ) ? a : b;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// min for chars&lt;br /&gt;char  min( char a, char b )&lt;br /&gt;{&lt;br /&gt;    return ( a &lt; b ) ? a : b;&lt;br /&gt;}&lt;br /&gt;//  etc...&lt;br /&gt;&lt;br /&gt;By using templates you can reduce this duplication to a single  templated function as shown below:&lt;br /&gt;&lt;br /&gt;template &lt;class&gt; T min( T a,T  b )&lt;br /&gt;{&lt;br /&gt;    return ( a &lt; b ) ? a : b;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Templates can  significantly reduce source code size and increase code flexibility without  reducing type safety.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;What are function  templates?&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;With function templates, you  can specify a set of functions that are based on the same code, but act on  different types or classes. For example:&lt;br /&gt;&lt;br /&gt;template &lt;class&gt; void  MySwap( T&amp;amp; a, T&amp;amp; b)&lt;br /&gt;{&lt;br /&gt;    T c( a );&lt;br /&gt;    a = b;&lt;br /&gt;    b =  c;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This code defines a family of functions that swap their  parameters. From this template you can generate functions that will swap not  only &lt;b&gt;int&lt;/b&gt; and &lt;b&gt;long&lt;/b&gt; types, but also user-defined types.  &lt;b&gt;MySwap&lt;/b&gt; will even swap classes if the class's copy constructor and  assignment operator are properly defined. In addition, the function template  will prevent you from swapping objects of different types, since the compiler  knows the types of the a and b parameters at compile time. Note that all of the  template parameters inside the angle brackets must be used as parameters for the  templated function. You call a templated functions as you would a non-templated  function; no special syntax is needed. For example:&lt;br /&gt;&lt;br /&gt;int i, j;&lt;br /&gt;char  k;&lt;br /&gt;MySwap( i, j ); //OK&lt;br /&gt;MySwap( i, k ); //Error, different  types.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;What&lt;/b&gt; &lt;b&gt;do&lt;/b&gt; &lt;b&gt;you mean&lt;/b&gt; &lt;b&gt;by&lt;/b&gt;  &lt;b&gt;Function&lt;/b&gt; &lt;b&gt;Template&lt;/b&gt; &lt;b&gt;Instantiation?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When a templated  function is first called for each type, the compiler creates an "instantiation",  a specialized version of the templated function will be called every time the  function is used for the type. If you have several identical instantiations,  even in different modules, only one copy of the instantiation will end up in the  executable. Standard type conversions are not applied to templated functions.  Instead, the compiler first looks for an "exact match" for the parameters  supplied. If this fails, it tries to create a new instantiation to create an  "exact match". Finally, the compiler attempts to apply overloading resolution to  find a match for the parameters. if this fails, the compiler generates an error.  What is a function template override? With a templated function, you can define  special behavior for a specific type by providing a non-templated function for  that type. For example:&lt;br /&gt;&lt;br /&gt;void MySwap( double a, double b );&lt;br /&gt;&lt;br /&gt;This  declaration enables you to define a different function for double variables.  Like other non-templated functions, Standard type conversions (such as promoting  a variable of type &lt;b&gt;float&lt;/b&gt; to &lt;b&gt;double&lt;/b&gt;) are  applied.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;What are Class  Templates?&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;You can use class templates  to create a family of classes that operate on a type. For  example:&lt;br /&gt;&lt;br /&gt;template &lt;class&gt; class ex&lt;br /&gt;{&lt;br /&gt;     public:&lt;br /&gt;    ex ( void ) ;&lt;br /&gt;    ~ex( void ) ;&lt;br /&gt;    int setdata( T a, int b  ) ;&lt;br /&gt;    private:&lt;br /&gt;    T Tarray[i] ;&lt;br /&gt;    int arraysize ;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;}  ;&lt;br /&gt;&lt;br /&gt;In this example, the templated class uses two parameters, a type T and  an &lt;b&gt;int&lt;/b&gt;&lt;b&gt; i&lt;/b&gt;. The T parameter can be passed any type, including  structures and classes. The i parameter has to be passed an integer constant.  Since &lt;b&gt;i&lt;/b&gt; is a constant defined at compile time, you can define a member  array of size &lt;b&gt;i&lt;/b&gt; using a standard automatic array declaration. Unlike  function templates, you do not use all template parameters in the definition of  a templated class.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;How do you define  member functions of a template class?&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Members of template class are defined slightly differently than  those of non-templated class. Continuing the preceding example:&lt;br /&gt;&lt;br /&gt;template  &lt;class&gt;&lt;br /&gt;int ex&lt;&gt;::setdata( T a, int b  )&lt;br /&gt;{&lt;br /&gt;    if( ( b &gt;= 0 ) &amp;amp;&amp;amp; (b &lt; i ) )&lt;br /&gt;    {&lt;br /&gt;          Tarray[b++] = a ;&lt;br /&gt;         return sizeof( a ) ;&lt;br /&gt;    }&lt;br /&gt;     else&lt;br /&gt;         return -1 ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;Constructors and Destructors&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Although constructors and destructors reference the name of the  templated class twice, the template parameters should be referenced only once in  the fully specified name.&lt;br /&gt;&lt;br /&gt;template &lt;class&gt;&lt;br /&gt;TempClass&lt;&gt;::TempClass( void )&lt;br /&gt;{&lt;br /&gt;    TRACE(  "TempClass created. \n" ) ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;template &lt;class&gt;&lt;br /&gt;TempClass&lt;&gt;::~TempClass( void )&lt;br /&gt;{&lt;br /&gt;    TRACE(  "TempClass destroyed. \n" ) ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;Class Template Instantiation&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Unlike function templates, when instantiating a class template,  you must explicitly instantiate the class by giving the parameters for the  templated class. To create an instance of &lt;b&gt;TempClass&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;TempClass&lt;&gt; test1 ; // OK&lt;br /&gt;TempClass&lt;&gt; test2 ; //  Error, second parameter&lt;br /&gt;// must be constant.&lt;br /&gt;&lt;br /&gt;No code is generated for  a templated class ( or function ) until it is instantiated. Moreover, member  functions are instantiated only if they are called. This can cause problems if  you are building a library with templates for other  users.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;Angle Bracket  Placement&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Bad placement of angle  brackets ( &lt;&gt; ) causes many template syntax errors. Make sure that you use  proper spacing and parenthesis to distinguish angle brackets from operators such  as &gt;&gt; and -&gt;. For example:&lt;br /&gt;&lt;br /&gt;TempClass&lt;&gt; b ? a : b  &gt; test1 ;&lt;br /&gt;&lt;br /&gt;should be rewritten as&lt;br /&gt;&lt;br /&gt;TempClass&lt;&gt;  b ? a : b ) &gt; test1 ;&lt;br /&gt;&lt;br /&gt;Similarly, pay extra attention when using macros  that use angle brackets as template arguments.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;When Should You Use Templates ?&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Templates are often used to :&lt;br /&gt;* Create a type-safe collection  class ( for example, a stack ) that can operate on data of any type.&lt;br /&gt;* Add  extra type checking for functions that would otherwise take void pointers.&lt;br /&gt;*  Encapsulate groups of operator overrides to modify type behavior ( such as smart  pointers ) .&lt;br /&gt;Most of these uses can be implemented without templates offer  several advantages:&lt;br /&gt;* Templates are easier to write. You create only one  generic version of your class or function instead of manually creating  specializations.&lt;br /&gt;* Templates can be easier to understand, since they can  provide a straightforward way of abstracting type information.&lt;br /&gt;* Templates  are type safe. Since the types that templates act upon are known at  compile-time, the compiler can perform type checking before errors  occur.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;Templates vs.  Macros&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;In many ways, templates work  like preprocessor macros, replacing the templated variable with the given type.  However, there are many differences between a macro like this:&lt;br /&gt;&lt;br /&gt;# define  min(i,j) ((i) &lt; (j) ? (i) : (j))&lt;br /&gt;&lt;br /&gt;and template:&lt;br /&gt;&lt;br /&gt;template  &lt;class&gt;T min (T i, T j) { return (i&lt;j) ? i:j) }&lt;br /&gt;&lt;br /&gt;Here are some  problems with the macro :&lt;br /&gt;* There is no way for the compiler to verify that  the macro parameter are of compatible types. The macro is expanded without any  special; type checking.&lt;br /&gt;* The i and j parameter are evaluated twice    . For  example, if either parameter has a post incremented variable, the incremented is  performed two times.&lt;br /&gt;* Since macros are expanded by the preprocessor,  compiler error messages will refer to the expanded macro, rather than the macro  definition itself. Also the macro will show up in expanded form during  debugging.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;Templates vs. void  Pointers&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Many functions that are now  implemented with void pointers can be implemented with templates. Void pointers  are often used to allow functions to operate on data of an unknown type. When  using void pointers, the compiler cannot distinguish types, so it cannot perform  type checking or type-specific behavior such as using type-specific operator  overloading, or constructors and destructors . With templates, you can create  functions and classes that operate on typed data. The type looks abstracted in  the template definition. However, at compile-time the compiler creates a  separate version of the function for each specified type. This enables the  compiler to treat templated classes and function as if they acted on specific  types. Templates can also improve coding clarity, since you don't need to create  special cases for complex types such as structures.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;Collection Classes&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Templates are a good way of implementing collection classes.  Version 3.0 of the Microsoft Foundation Classes uses templates to implement six  new collection classes: &lt;b&gt;CArray&lt;/b&gt;, &lt;b&gt;CMap&lt;/b&gt;, &lt;b&gt;CTypedPtrArray&lt;/b&gt;,  &lt;b&gt;CTypedPtrList&lt;/b&gt;, and &lt;b&gt;CTypedPtrMap&lt;/b&gt;. For information on using and  customizing these classes, see the "collections" articles in Programming with  the Microsoft Foundation Class Library. The My stack collection is a simple  implementation of a stack. The two template parameter ,&lt;b&gt;T&lt;/b&gt; and &lt;b&gt;i&lt;/b&gt;,  specify the type of elements in the stack and the maximum number of that item in  the stack. The push and pop member functions add and remove items in the stack,  with the stack growing from the bottoms of the stack.&lt;br /&gt;&lt;br /&gt;templates &lt;class&gt; class My stack&lt;br /&gt;{&lt;br /&gt;    T stackBuffer[i];&lt;br /&gt;    int  cItems;&lt;br /&gt;    public:&lt;br /&gt;    void Mystack(void):cItems(i) {};&lt;br /&gt;    void push  ( const T items ) ;&lt;br /&gt;    T pop ( void );&lt;br /&gt;};&lt;br /&gt;template &lt;class&gt; void My stack&lt;&gt;::push (const T items)&lt;br /&gt;{&lt;br /&gt;    if (cItems  &gt;0)&lt;br /&gt;        stackbuffer[--cItems] = items;&lt;br /&gt;    else&lt;br /&gt;        throw "  stack overflow error .";&lt;br /&gt;    return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;template &lt;class&gt; T My stack&lt;t,&gt;::pop (void)&lt;br /&gt;{&lt;br /&gt;    if(cItems &lt;i)&lt;br /&gt;         return stackBuffer[cItems++]&lt;br /&gt;    else&lt;br /&gt;        throw "stack underflow  error .";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;Smart&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;Pointers&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;C++ allows you to create "smart pointer" classes that  encapsulate pointer and override pointer operators to add new functionally to  pointer of almost any type. The following code outlines a simple references  count garbage collector. The template class &lt;b&gt;Ptr&lt;t&gt;&lt;/b&gt; implemented a  garbage collecting pointer to any class derived from  &lt;b&gt;Refcount&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;class Refcount&lt;br /&gt;{&lt;br /&gt;    int crefs;&lt;br /&gt;     public:&lt;br /&gt;    Refcount (void){crefs =0;}&lt;br /&gt;    void upcount(void){  ++crefs;}&lt;br /&gt;    void downcount(void){if(--crefs ==0)delete this  ;}&lt;br /&gt;};&lt;br /&gt;class Sample : public Refcount&lt;br /&gt;{&lt;br /&gt;    public :&lt;br /&gt;    void  dosomething(void){ TRACE(did somethiing\n");}&lt;br /&gt;};&lt;br /&gt;template &lt;class&gt;  class Ptr&lt;br /&gt;{&lt;br /&gt;    T* p;&lt;br /&gt;    public :&lt;br /&gt;    Ptr(T* P_): p(p_){  p-&gt;upcount();}&lt;br /&gt;    ~Ptr(void){ p-&gt;downcount();}&lt;br /&gt;    operator  T*(void){ return p;}&lt;br /&gt;    T&amp;amp; oprator* (void){return *p}&lt;br /&gt;    T*  operator-&gt;(void){ return p;}&lt;br /&gt;    Ptr&amp;amp; operator =(t*p_)&lt;br /&gt;     {&lt;br /&gt;         p-&gt;upcount(); p=p_ ; p-&gt;downcount();return *this;&lt;br /&gt;     }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    Ptr&lt;samples&gt; p =new Samples; //  samples #1&lt;br /&gt;    Ptr&lt;sample&gt; p2 = new Samples;// samples #2&lt;br /&gt;    p=p2;  // #1 has 0 refs, so it is destroyed ; #2 has two refs&lt;br /&gt;     p-&gt;doSomething();&lt;br /&gt;    return 0;&lt;br /&gt;    // As p2 and p go out of scope,  their destructors call&lt;br /&gt;    // downcount. The cref varaible of #2 goes to 0,so  #2 is&lt;br /&gt;    //destroyed&lt;br /&gt;}&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Classes &lt;b&gt;Refcount&lt;/b&gt; and  &lt;b&gt;Ptr&lt;/b&gt;&lt;b&gt;&lt;t&lt;/b&gt;&gt; together provide a simple garbage collection solution  for any class that can afford the int per instance overhead to inherit from  &lt;b&gt;Refcount&lt;/b&gt;. Note that primary benefit of using a parametric class like  &lt;b&gt;Ptr &lt;t&gt;&lt;/b&gt; instead of a more generic class like &lt;b&gt;Ptr&lt;/b&gt; is the  former is complete type-safe. The preceding code ensures that a  &lt;b&gt;Ptr&lt;t&gt;&lt;/b&gt; can be used almost anywhere a &lt;b&gt;T* &lt;/b&gt;is used; in  contrast, a generic &lt;b&gt;Ptr&lt;/b&gt; would only provide implicit conversions to  &lt;b&gt;void*. &lt;/b&gt;For example, if this class is used to create and manipulate  garbage collected files, symbols, strings, and so forth. From the class template  &lt;b&gt;Ptr&lt;t&gt;&lt;/b&gt;, the compiler will create template classes  &lt;b&gt;Ptr&lt;file&gt;&lt;/b&gt;,&lt;b&gt; Ptr&lt;symbol&gt;&lt;/b&gt;, &lt;b&gt;Ptr&lt;string&gt;&lt;/b&gt;, and  so on, and their member functions:&lt;b&gt; Ptr&lt;file&gt;::~Ptr( )&lt;/b&gt;,&lt;b&gt;  Ptr&lt;file&gt;:: operator File*( )&lt;/b&gt;, &lt;b&gt;Ptr&lt;string&gt;::~Ptr(&lt;/b&gt;  &lt;b&gt;)&lt;/b&gt;, &lt;b&gt;Ptr&lt;/b&gt;&lt;b&gt;&lt;string&gt;::operator&lt;/b&gt; &lt;b&gt;String*( )&lt;/b&gt;, and so  on.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-606273334152082787?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/606273334152082787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=606273334152082787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/606273334152082787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/606273334152082787'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/12/c-templates.html' title='C++ Templates'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-7900712519796551600</id><published>2008-11-23T00:38:00.000-08:00</published><updated>2008-12-23T03:57:26.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interviews'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>What is a copy constructor ? What is the difference between copy constructor and overloaded assignment operator ?</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;br /&gt;What is a copy constructor ?What is the need for it ? What is the Shallow and deep copy ? When it gets called ? Write the signature ? What is the difference between copy constructor and overloaded assignment operator ? &lt;a href="http://sumedh.shende.googlepages.com/que4"&gt;Answers.....&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1669628720909604414-7900712519796551600?l=cplusplus-faqs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cplusplus-faqs.blogspot.com/feeds/7900712519796551600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1669628720909604414&amp;postID=7900712519796551600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/7900712519796551600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1669628720909604414/posts/default/7900712519796551600'/><link rel='alternate' type='text/html' href='http://cplusplus-faqs.blogspot.com/2008/11/what-is-copy-constructor-what-is.html' title='What is a copy constructor ? What is the difference between copy constructor and overloaded assignment operator ?'/><author><name>Siebel Expert</name><uri>http://www.blogger.com/profile/11533458660230230361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1669628720909604414.post-5493150391979723418</id><published>2008-11-20T01:57:00.000-08:00</published><updated>2008-12-23T03:57:26.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interviews'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ Objective Questions</title><content type='html'>  &lt;table style="border-collapse: collapse; width: 514pt;" border="0" cellpadding="0" cellspacing="0" width="685"&gt;&lt;col style="width: 85pt;" width="113"&gt;  &lt;col style="width: 189pt;" width="252"&gt;  &lt;col style="width: 48pt;" span="5" width="64"&gt;  &lt;tbody&gt;&lt;tr style="height: 114.75pt;" height="153"&gt;   &lt;td class="xl66" style="height: 114.75pt; width: 85pt;" width="113" height="153"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-left: medium none; width: 189pt;" width="252"&gt;Which of the   following are good reasons to use an object oriented language?&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-left: medium none; width: 48pt;" width="64"&gt;You can define   your data types&lt;span style=""&gt; &lt;/span&gt;&lt;/td&gt;   &lt;td class="xl67" style="border-left: medium none; width: 48pt;" width="64"&gt;Program   statements are simpler than in procedural languages.&lt;/td&gt;   &lt;td class="xl67" style="border-left: medium none; width: 48pt;" width="64"&gt;An OO program can   be taught to correct its own errors.&lt;/td&gt;   &lt;td class="xl67" style="border-left: medium none; width: 48pt;" width="64"&gt;It's easier to   conceptualize an OO program.&lt;/td&gt;   &lt;td class="xl67" style="border-left: medium none; width: 48pt;" width="64"&gt;A&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 51pt;" height="68"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 51pt; width: 85pt;" width="113" height="68"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;When   a language has the capacity to produce new data type, it is said to be&lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Reprehensible&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Encapsulated&lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Overload&lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Extensible&lt;span style=""&gt; &lt;/span&gt;&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;D&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 76.5pt;" height="102"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 76.5pt; width: 85pt;" width="113" height="102"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;A   normal C++ operator that acts in a special way on newly defined data types is   said to be&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Glorified&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Encapsulated&lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Classified&lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Overloaded&lt;span style=""&gt; &lt;/span&gt;&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;D&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 63.75pt;" height="85"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 63.75pt; width: 85pt;" width="113" height="85"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;main()   returns a value of type&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;real&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;char&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;int&lt;span style=""&gt; &lt;/span&gt;&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;null&lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;C&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 89.25pt;" height="119"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 89.25pt; width: 85pt;" width="113" height="119"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;Sharing   of common information are achieved by the concept of&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Virtual   copying&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Inheritance&lt;span style=""&gt; &lt;/span&gt;&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Encapsulation&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;None   of these&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;B&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 102pt;" height="136"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 102pt; width: 85pt;" width="113" height="136"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;In   a for loop with a multi-statement loop body, semicolons should appear   following&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;The   for statement itself&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;The   closing brace in a multi-statement loop body&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Each   statement within the loop body.&lt;span style=""&gt; &lt;/span&gt;&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;The   test expression&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;C&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 89.25pt;" height="119"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 89.25pt; width: 85pt;" width="113" height="119"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;A   variable defined within a block is visible&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;From   the point of definition onwards in the program&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;From   the point of definition onwards in the function&lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;From   the point of definition onwards in the block&lt;span style=""&gt; &lt;/span&gt;&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Throughout   the function&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;C&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 76.5pt;" height="102"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 76.5pt; width: 85pt;" width="113" height="102"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;The   library function exit() causes an exit from&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;The   loop in which it occurs&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;The   block in which it occurs&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;The   function in which it occurs&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;The   program in which it occurs&lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;D&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 89.25pt;" height="119"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 89.25pt; width: 85pt;" width="113" height="119"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;The   getch() library function&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Returns   a character when any key is pressed&lt;span style=""&gt; &lt;/span&gt;&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Returns   a character when ENTER is pressed&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Display   a character on the screen when a key is pressed&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Does   not display a character on the screen&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;A&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 76.5pt;" height="102"&gt;   &lt;td class="xl66" style="border-top: medium none; height: 76.5pt; width: 85pt;" width="113" height="102"&gt;C++&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 189pt;" width="252"&gt;_______   argument(s) are passed in case of binary overloaded operators.&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;Two  &lt;br /&gt;    &lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;One&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;No&lt;/td&gt;   &lt;td class="xl67" style="border-top: medium none; border-left: medium none; width: 48pt;" width="64"&gt;None   of the above&lt;/td&gt;   &lt;td class="
