A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FClass%2Ftemplate_class</id>
		<title>C++/Class/template class - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FClass%2Ftemplate_class"/>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Class/template_class&amp;action=history"/>
		<updated>2026-04-18T19:16:50Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B/Class/template_class&amp;diff=1356&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Class/template_class&amp;diff=1356&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B/Class/template_class&amp;diff=1357&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Class/template_class&amp;diff=1357&amp;oldid=prev"/>
				<updated>2010-05-25T10:25:41Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==A generic safe-array class that prevents array boundary errors.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;new&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
template &amp;lt;class T, int len&amp;gt; class dyn_safe_array {&lt;br /&gt;
  T *aptr;  &lt;br /&gt;
  int length;&lt;br /&gt;
public:&lt;br /&gt;
  dyn_safe_array();&lt;br /&gt;
  // copy constructor.&lt;br /&gt;
  dyn_safe_array(const dyn_safe_array &amp;amp;obj);&lt;br /&gt;
  // Release the allocated memory when a dyn_safe_array object goes out of scope.&lt;br /&gt;
  ~dyn_safe_array() {&lt;br /&gt;
     delete [] aptr;&lt;br /&gt;
  }&lt;br /&gt;
  // Overload assignment.&lt;br /&gt;
  dyn_safe_array &amp;amp;operator=(const dyn_safe_array&amp;lt;T,len&amp;gt; &amp;amp;rh_op);&lt;br /&gt;
  // Use the subscripting operator to access elements in the safe array.&lt;br /&gt;
  T &amp;amp;operator[](int i);&lt;br /&gt;
  &lt;br /&gt;
  // Return the size of the array.&lt;br /&gt;
  int getlen() { return length; }&lt;br /&gt;
};&lt;br /&gt;
// constructor.&lt;br /&gt;
template &amp;lt;class T, int len&amp;gt;&lt;br /&gt;
dyn_safe_array&amp;lt;T, len&amp;gt;::dyn_safe_array() {&lt;br /&gt;
  try {&lt;br /&gt;
    aptr = new T[len];&lt;br /&gt;
  } catch(bad_alloc ba) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Can&amp;quot;t allocate array.\n&amp;quot;;&lt;br /&gt;
    // Take appropriate action here. This is just&lt;br /&gt;
    // a placeholder response.&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
  // Initialize the array elements to their default value.&lt;br /&gt;
  for(int i=0; i &amp;lt; len; ++i) aptr[i] = T();&lt;br /&gt;
  length = len;&lt;br /&gt;
}&lt;br /&gt;
// copy constructor.&lt;br /&gt;
template &amp;lt;class T, int len&amp;gt;&lt;br /&gt;
dyn_safe_array&amp;lt;T, len&amp;gt;::dyn_safe_array(const dyn_safe_array &amp;amp;obj) {&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Using dyn_safe_array&amp;quot;s copy constructor to make a copy.\n&amp;quot;;&lt;br /&gt;
  try {&lt;br /&gt;
    aptr = new T[obj.length];&lt;br /&gt;
  } catch(bad_alloc ba) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Can&amp;quot;t allocate array.\n&amp;quot;;&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
  length = obj.length;&lt;br /&gt;
  // Copy contents of the array.&lt;br /&gt;
  for(int i=0; i &amp;lt; length; ++i)&lt;br /&gt;
    aptr[i] = obj.aptr[i];&lt;br /&gt;
}&lt;br /&gt;
// Overload assignment so that a copy of the array is made.&lt;br /&gt;
// The copy is stored in an allocated memory that is separate&lt;br /&gt;
// from that used by the right-hand operand.&lt;br /&gt;
template&amp;lt;class T, int len&amp;gt; dyn_safe_array&amp;lt;T, len&amp;gt; &amp;amp;&lt;br /&gt;
dyn_safe_array&amp;lt;T, len&amp;gt;::operator=(const dyn_safe_array&amp;lt;T, len&amp;gt; &amp;amp;rh_op) {&lt;br /&gt;
 // If necessary, release the memory currently used by the object.&lt;br /&gt;
 if(aptr &amp;amp;&amp;amp; (length != rh_op.length)) {&lt;br /&gt;
   // Delete the previously allocated memory.&lt;br /&gt;
   delete aptr;&lt;br /&gt;
   try {&lt;br /&gt;
     // Allocate an array of the same size as the one used by rh_op.&lt;br /&gt;
     aptr = new T[rh_op.length];&lt;br /&gt;
   } catch(bad_alloc ba) {&lt;br /&gt;
     // Take appropriate action here. This is just a placeholder response.&lt;br /&gt;
     cout &amp;lt;&amp;lt; &amp;quot;Can&amp;quot;t allocate array.\n&amp;quot;;&lt;br /&gt;
     exit(1);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 length = rh_op.length;&lt;br /&gt;
 // Copy contents of the array.&lt;br /&gt;
 for(int i=0; i &amp;lt; length; ++i)&lt;br /&gt;
   aptr[i] = rh_op.aptr[i];&lt;br /&gt;
   return *this;&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class T, int len&amp;gt; T &amp;amp;dyn_safe_array&amp;lt;T, len&amp;gt;::operator[](int i)&lt;br /&gt;
{&lt;br /&gt;
  if(i &amp;lt; 0 || i &amp;gt; length) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nIndex value of &amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; is out-of-bounds.\n&amp;quot;;&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
  return aptr[i];&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class T, int len&amp;gt;&lt;br /&gt;
dyn_safe_array&amp;lt;T, len&amp;gt; f(dyn_safe_array&amp;lt;T, len&amp;gt; x) {&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;f() is returning a copy of x.\n&amp;quot;;&lt;br /&gt;
  return x;&lt;br /&gt;
}&lt;br /&gt;
class myclass {&lt;br /&gt;
public:&lt;br /&gt;
  int x;&lt;br /&gt;
  myclass(int i) { x = i; };&lt;br /&gt;
  myclass() { x = -1; }&lt;br /&gt;
};&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  // Use the integer array.&lt;br /&gt;
  dyn_safe_array&amp;lt;int, 5&amp;gt; i_ar;&lt;br /&gt;
  for(int i=0; i &amp;lt; i_ar.getlen(); ++i) i_ar[i] = i;&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Contents of i_ar: &amp;quot;;&lt;br /&gt;
  for(int i=0; i &amp;lt; i_ar.getlen(); ++i) cout &amp;lt;&amp;lt; i_ar[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  dyn_safe_array&amp;lt;int, 5&amp;gt; i_ar2 = i_ar;&lt;br /&gt;
  for(int i=0; i &amp;lt; i_ar2.getlen(); ++i) cout &amp;lt;&amp;lt; i_ar2[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  dyn_safe_array&amp;lt;int, 5&amp;gt; i_ar3;&lt;br /&gt;
  for(int i=0; i &amp;lt; i_ar3.getlen(); ++i) cout &amp;lt;&amp;lt; i_ar3[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt;&amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  i_ar3 = f(i_ar);&lt;br /&gt;
  for(int i=0; i &amp;lt; i_ar3.getlen(); ++i)  cout &amp;lt;&amp;lt; i_ar3[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  dyn_safe_array&amp;lt;myclass, 3&amp;gt; mc_ar;&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Original contents of mc_ar: &amp;quot;;&lt;br /&gt;
  for(int i=0; i &amp;lt; mc_ar.getlen(); ++i) cout &amp;lt;&amp;lt; mc_ar[i].x &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
  mc_ar[0].x = 9;&lt;br /&gt;
  mc_ar[1].x = 8;&lt;br /&gt;
  mc_ar[2].x = 7;&lt;br /&gt;
  for(int i=0; i &amp;lt; mc_ar.getlen(); ++i) cout &amp;lt;&amp;lt; mc_ar[i].x &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;   mc_ar2 = f(mc_ar);\n\n&amp;quot;;&lt;br /&gt;
  dyn_safe_array&amp;lt;myclass, 3&amp;gt; mc_ar2;&lt;br /&gt;
  mc_ar2 = f(mc_ar);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Contents of mc_ar2 after receiving f(mc_ar): &amp;quot;;&lt;br /&gt;
  for(int i=0; i &amp;lt; mc_ar2.getlen(); ++i) cout &amp;lt;&amp;lt; mc_ar2[i].x &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==An Example with Two Generic Data Types==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class Type1, class Type2&amp;gt; class myclass&lt;br /&gt;
{&lt;br /&gt;
  Type1 i;&lt;br /&gt;
  Type2 j;&lt;br /&gt;
public:&lt;br /&gt;
  myclass(Type1 a, Type2 b) { i = a; j = b; }&lt;br /&gt;
  void show() { cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; j &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;; }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  myclass&amp;lt;int, double&amp;gt; ob1(10, 0.23);&lt;br /&gt;
  myclass&amp;lt;char, char *&amp;gt; ob2(&amp;quot;X&amp;quot;, &amp;quot;Templates add power.&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
  ob1.show(); &lt;br /&gt;
  ob2.show(); &lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Applying Template Classes: A Generic Array Class==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
const int SIZE = 10;&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class T&amp;gt; class MyClass {&lt;br /&gt;
  T a[SIZE];&lt;br /&gt;
public:&lt;br /&gt;
  MyClass() {&lt;br /&gt;
    register int i;&lt;br /&gt;
    for(i=0; i&amp;lt;SIZE; i++) a[i] = i;&lt;br /&gt;
  }&lt;br /&gt;
  T &amp;amp;operator[](int i);&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class T&amp;gt; T &amp;amp;MyClass&amp;lt;T&amp;gt;::operator[](int i)&lt;br /&gt;
{&lt;br /&gt;
  if(i&amp;lt;0 || i&amp;gt; SIZE-1) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nIndex value of &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; is out-of-bounds.\n&amp;quot;;&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
  return a[i];&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  MyClass&amp;lt;int&amp;gt; intob; // integer array&lt;br /&gt;
  MyClass&amp;lt;double&amp;gt; doubleob; // double array&lt;br /&gt;
   &lt;br /&gt;
  for(int i=0; i&amp;lt;SIZE; i++) intob[i] = i;&lt;br /&gt;
  for(int i=0; i&amp;lt;SIZE; i++) cout &amp;lt;&amp;lt; intob[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
   &lt;br /&gt;
  for(int i=0; i&amp;lt;SIZE; i++) doubleob[i] = (double) i/3;&lt;br /&gt;
  for(int i=0; i&amp;lt;SIZE; i++) cout &amp;lt;&amp;lt; doubleob[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demonstrate a very simple safe pointer class.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
// The exception type thrown by the safe pointer.&lt;br /&gt;
class bad_ptr {&lt;br /&gt;
public:&lt;br /&gt;
  string msg;&lt;br /&gt;
  bad_ptr(string str) { msg = str; }&lt;br /&gt;
};&lt;br /&gt;
// A class used to demonstrate the safe pointer.&lt;br /&gt;
class myclass {&lt;br /&gt;
public:&lt;br /&gt;
  int alpha;&lt;br /&gt;
  int beta;&lt;br /&gt;
  myclass(int p, int q) { alpha = p; beta = q; }&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;class T&amp;gt; class safe_ptr {&lt;br /&gt;
  T *ptr;&lt;br /&gt;
public:&lt;br /&gt;
  safe_ptr() { ptr = 0; }&lt;br /&gt;
  T *operator-&amp;gt;() {&lt;br /&gt;
    if(!ptr != 0) throw bad_ptr(&amp;quot;Attempt to use -&amp;gt; on null pointer.&amp;quot;);&lt;br /&gt;
    else return ptr;&lt;br /&gt;
  }&lt;br /&gt;
  T &amp;amp;operator*() {&lt;br /&gt;
    if(!ptr) throw bad_ptr(&amp;quot;Attempt to dereference null pointer.&amp;quot;);&lt;br /&gt;
    else return *ptr;&lt;br /&gt;
  }&lt;br /&gt;
  operator T *() { return ptr; }&lt;br /&gt;
  T *operator=(T *val) { ptr = val; return ptr; }&lt;br /&gt;
};&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  safe_ptr&amp;lt;int&amp;gt; intptr;&lt;br /&gt;
  try {&lt;br /&gt;
    *intptr = 23;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The value pointed to by intptr is: &amp;quot; &amp;lt;&amp;lt; *intptr &amp;lt;&amp;lt; endl;&lt;br /&gt;
  } catch(bad_ptr bp) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; bp.msg &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
  intptr = new int;&lt;br /&gt;
  try {&lt;br /&gt;
    *intptr = 23;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The value pointed to by intpr is: &amp;quot; &amp;lt;&amp;lt; *intptr &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  } catch(bad_ptr bp) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; bp.msg &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
  safe_ptr&amp;lt;myclass&amp;gt; mcptr;&lt;br /&gt;
  try {&lt;br /&gt;
    mcptr = new myclass(100, 200);&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;The values of alpha and beta for mcptr are: &amp;quot;&lt;br /&gt;
         &amp;lt;&amp;lt; mcptr-&amp;gt;alpha &amp;lt;&amp;lt; &amp;quot; and &amp;quot; &amp;lt;&amp;lt; mcptr-&amp;gt;beta &amp;lt;&amp;lt; endl;&lt;br /&gt;
    mcptr-&amp;gt;alpha = 27;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;New value for mcptr-&amp;gt;alpha: &amp;quot; &amp;lt;&amp;lt; mcptr-&amp;gt;alpha &amp;lt;&amp;lt; endl;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Same as (*mcptr).alpha: &amp;quot; &amp;lt;&amp;lt; (*mcptr).alpha &amp;lt;&amp;lt; endl;&lt;br /&gt;
    mcptr-&amp;gt;beta = 99;&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;New value for mcptr-&amp;gt;beta: &amp;quot; &amp;lt;&amp;lt; mcptr-&amp;gt;beta &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
  } catch(bad_ptr bp) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; bp.msg &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
  safe_ptr&amp;lt;myclass&amp;gt; mcptr2;&lt;br /&gt;
  try {&lt;br /&gt;
    mcptr2-&amp;gt;alpha = 88;&lt;br /&gt;
  } catch(bad_ptr bp) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; bp.msg &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
  delete intptr;&lt;br /&gt;
  delete mcptr;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Explicit Class Specializations for generic template class==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class T&amp;gt; class myclass {&lt;br /&gt;
  T x;&lt;br /&gt;
public:&lt;br /&gt;
  myclass(T a) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Inside generic myclass\n&amp;quot;;&lt;br /&gt;
    x = a;&lt;br /&gt;
  }&lt;br /&gt;
  T getx() { return x; }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;&amp;gt; class myclass&amp;lt;int&amp;gt; {&lt;br /&gt;
  int x;&lt;br /&gt;
public:&lt;br /&gt;
  myclass(int a) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Inside myclass&amp;lt;int&amp;gt; specialization\n&amp;quot;;&lt;br /&gt;
    x = a * a;&lt;br /&gt;
  }&lt;br /&gt;
  int getx() { return x; }&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  myclass&amp;lt;double&amp;gt; d(10.1);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;double: &amp;quot; &amp;lt;&amp;lt; d.getx() &amp;lt;&amp;lt; &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
  myclass&amp;lt;int&amp;gt; i(5);&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;int: &amp;quot; &amp;lt;&amp;lt; i.getx() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Generic Classes: demonstrates a generic stack.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
const int SIZE = 10;&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class StackType&amp;gt; class stack {&lt;br /&gt;
  StackType stck[SIZE]; &lt;br /&gt;
  int tos; &lt;br /&gt;
   &lt;br /&gt;
public:&lt;br /&gt;
  stack() { tos = 0; } &lt;br /&gt;
  void push(StackType ob); &lt;br /&gt;
  StackType pop(); &lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;class StackType&amp;gt; void stack&amp;lt;StackType&amp;gt;::push(StackType ob)&lt;br /&gt;
{&lt;br /&gt;
  if(tos==SIZE) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Stack is full.\n&amp;quot;;&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  stck[tos] = ob;&lt;br /&gt;
  tos++;&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class StackType&amp;gt; StackType stack&amp;lt;StackType&amp;gt;::pop()&lt;br /&gt;
{&lt;br /&gt;
  if(tos==0) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;Stack is empty.\n&amp;quot;;&lt;br /&gt;
    return 0; // return null on empty stack&lt;br /&gt;
  }&lt;br /&gt;
  tos--;&lt;br /&gt;
  return stck[tos];&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  stack&amp;lt;char&amp;gt; s1, s2;&lt;br /&gt;
   &lt;br /&gt;
  s1.push(&amp;quot;a&amp;quot;);&lt;br /&gt;
  s2.push(&amp;quot;x&amp;quot;);&lt;br /&gt;
  s1.push(&amp;quot;b&amp;quot;);&lt;br /&gt;
  s2.push(&amp;quot;y&amp;quot;);&lt;br /&gt;
  s1.push(&amp;quot;c&amp;quot;);&lt;br /&gt;
  s2.push(&amp;quot;z&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
  for(int i=0; i&amp;lt;3; i++) cout &amp;lt;&amp;lt; &amp;quot;Pop s1: &amp;quot; &amp;lt;&amp;lt; s1.pop() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
  for(int i=0; i&amp;lt;3; i++) cout &amp;lt;&amp;lt; &amp;quot;Pop s2: &amp;quot; &amp;lt;&amp;lt; s2.pop() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
  stack&amp;lt;double&amp;gt; ds1, ds2;&lt;br /&gt;
   &lt;br /&gt;
  ds1.push(1.1);&lt;br /&gt;
  ds2.push(2.2);&lt;br /&gt;
  ds1.push(3.3);&lt;br /&gt;
  ds2.push(4.4);&lt;br /&gt;
  ds1.push(5.5);&lt;br /&gt;
  ds2.push(6.6);&lt;br /&gt;
   &lt;br /&gt;
  for(int i=0; i&amp;lt;3; i++) cout &amp;lt;&amp;lt; &amp;quot;Pop ds1: &amp;quot; &amp;lt;&amp;lt; ds1.pop() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
  for(int i=0; i&amp;lt;3; i++) cout &amp;lt;&amp;lt; &amp;quot;Pop ds2: &amp;quot; &amp;lt;&amp;lt; ds2.pop() &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==generic stack template class==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
const int SIZE = 100;&lt;br /&gt;
template &amp;lt;class SType&amp;gt; class stack {&lt;br /&gt;
   SType stck[SIZE];&lt;br /&gt;
   int tos;&lt;br /&gt;
 public:&lt;br /&gt;
   stack(void);&lt;br /&gt;
   ~stack(void);&lt;br /&gt;
   void push(SType i);&lt;br /&gt;
   SType pop(void);&lt;br /&gt;
 };&lt;br /&gt;
template &amp;lt;class SType&amp;gt; stack&amp;lt;SType&amp;gt;::stack()&lt;br /&gt;
{&lt;br /&gt;
   tos = 0;&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Stack Initialized.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class SType&amp;gt; stack&amp;lt;SType&amp;gt;::~stack()&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Stack Destroyed.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class SType&amp;gt; void stack&amp;lt;SType&amp;gt;::push(SType i)&lt;br /&gt;
{&lt;br /&gt;
   if(tos==SIZE)&lt;br /&gt;
    {&lt;br /&gt;
      cout &amp;lt;&amp;lt; &amp;quot;Stack is full.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
   stck[tos++] = i;&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class SType&amp;gt; SType stack&amp;lt;SType&amp;gt;::pop(void)&lt;br /&gt;
{&lt;br /&gt;
   if(tos==0)&lt;br /&gt;
    {&lt;br /&gt;
      cout &amp;lt;&amp;lt; &amp;quot;Stack underflow.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
      return 0;&lt;br /&gt;
    }&lt;br /&gt;
   return stck[--tos];&lt;br /&gt;
}&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
   stack&amp;lt;int&amp;gt; a;&lt;br /&gt;
   stack&amp;lt;double&amp;gt; b;&lt;br /&gt;
   stack&amp;lt;char&amp;gt; c;&lt;br /&gt;
   int i;&lt;br /&gt;
   a.push(1);&lt;br /&gt;
   a.push(2);&lt;br /&gt;
   b.push(99.3);&lt;br /&gt;
   b.push(-12.23);&lt;br /&gt;
   cout &amp;lt;&amp;lt; a.pop() &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
   cout &amp;lt;&amp;lt; a.pop() &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
   cout &amp;lt;&amp;lt; b.pop() &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
   cout &amp;lt;&amp;lt; b.pop() &amp;lt;&amp;lt; endl;&lt;br /&gt;
   for(i=0; i&amp;lt;10; i++)&lt;br /&gt;
      c.push((char) &amp;quot;A&amp;quot; + i);&lt;br /&gt;
   for(i=0; i&amp;lt;10; i++)&lt;br /&gt;
      cout &amp;lt;&amp;lt; c.pop();&lt;br /&gt;
   cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Get storage off stack for array==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
template &amp;lt;class T, int n&amp;gt;&lt;br /&gt;
class assign_array {&lt;br /&gt;
public:&lt;br /&gt;
   T  a[n];&lt;br /&gt;
};&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   assign_array&amp;lt;double, 50&amp;gt;  x, y;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 50; ++i)&lt;br /&gt;
      x.a[i] = i;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 50; ++i)&lt;br /&gt;
      y.a[i] = i * 2;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 50; ++i)&lt;br /&gt;
      cout &amp;lt;&amp;lt; x.a[i] &amp;lt;&amp;lt; &amp;quot;\t&amp;quot;;&lt;br /&gt;
   for (int i = 0; i &amp;lt; 50; ++i)&lt;br /&gt;
      cout &amp;lt;&amp;lt; y.a[i] &amp;lt;&amp;lt; &amp;quot;\t&amp;quot;;&lt;br /&gt;
   x = y;                     //should work efficiently&lt;br /&gt;
   for (int i = 0; i &amp;lt; 50; ++i)&lt;br /&gt;
      cout &amp;lt;&amp;lt; x.a[i] &amp;lt;&amp;lt; &amp;quot;\t&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Passing by reference and using virtual functions in exceptions.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
const int DefaultSize = 10;&lt;br /&gt;
class Array&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Array(int itsSize = DefaultSize);&lt;br /&gt;
    Array(const Array &amp;amp;rhs);&lt;br /&gt;
    ~Array() { delete [] pType;}&lt;br /&gt;
    Array&amp;amp; operator=(const Array&amp;amp;);&lt;br /&gt;
    int&amp;amp; operator[](int offSet);&lt;br /&gt;
    const int&amp;amp; operator[](int offSet) const;&lt;br /&gt;
    int GetitsSize() const { return itsSize; }&lt;br /&gt;
    friend ostream&amp;amp; operator&amp;lt;&amp;lt; (ostream&amp;amp;, const Array&amp;amp;);&lt;br /&gt;
    class xBoundary {};&lt;br /&gt;
    class xSize&lt;br /&gt;
    {&lt;br /&gt;
    public:&lt;br /&gt;
       xSize(int size):itsSize(size) {}&lt;br /&gt;
       ~xSize(){}&lt;br /&gt;
       virtual int GetSize() { return itsSize; }&lt;br /&gt;
       virtual void PrintError() &lt;br /&gt;
       { &lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;Size error. Received: &amp;quot;;&lt;br /&gt;
           cout &amp;lt;&amp;lt; itsSize &amp;lt;&amp;lt; endl; &lt;br /&gt;
       }&lt;br /&gt;
    protected:&lt;br /&gt;
       int itsSize;&lt;br /&gt;
    };&lt;br /&gt;
    class xTooBig : public xSize&lt;br /&gt;
    {&lt;br /&gt;
    public:&lt;br /&gt;
       xTooBig(int size):xSize(size){}&lt;br /&gt;
       virtual void PrintError() &lt;br /&gt;
       { &lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;Too big! Received: &amp;quot;;&lt;br /&gt;
           cout &amp;lt;&amp;lt; xSize::itsSize &amp;lt;&amp;lt; endl; &lt;br /&gt;
       }&lt;br /&gt;
    };&lt;br /&gt;
    class xTooSmall : public xSize&lt;br /&gt;
    {&lt;br /&gt;
    public:&lt;br /&gt;
       xTooSmall(int size):xSize(size){}&lt;br /&gt;
       virtual void PrintError() &lt;br /&gt;
       { &lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;Too small! Received: &amp;quot;;&lt;br /&gt;
           cout &amp;lt;&amp;lt; xSize::itsSize &amp;lt;&amp;lt; endl; &lt;br /&gt;
       }&lt;br /&gt;
    };&lt;br /&gt;
    class xZero  : public xTooSmall&lt;br /&gt;
    {&lt;br /&gt;
    public:&lt;br /&gt;
       xZero(int size):xTooSmall(size){}&lt;br /&gt;
       virtual void PrintError() &lt;br /&gt;
       { &lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;Zero!!. Received: &amp;quot; ;&lt;br /&gt;
           cout &amp;lt;&amp;lt; xSize::itsSize &amp;lt;&amp;lt; endl; &lt;br /&gt;
       }&lt;br /&gt;
    };&lt;br /&gt;
    class xNegative : public xSize&lt;br /&gt;
    {&lt;br /&gt;
    public:&lt;br /&gt;
       xNegative(int size):xSize(size){}&lt;br /&gt;
       virtual void PrintError() &lt;br /&gt;
       { &lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;Negative! Received: &amp;quot;;&lt;br /&gt;
           cout &amp;lt;&amp;lt; xSize::itsSize &amp;lt;&amp;lt; endl; &lt;br /&gt;
       }&lt;br /&gt;
    };&lt;br /&gt;
 private:&lt;br /&gt;
    int *pType;&lt;br /&gt;
    int  itsSize;&lt;br /&gt;
 };&lt;br /&gt;
 Array::Array(int size):&lt;br /&gt;
 itsSize(size)&lt;br /&gt;
 {&lt;br /&gt;
    if (size == 0)&lt;br /&gt;
       throw xZero(size);&lt;br /&gt;
    if (size &amp;gt; 30000)&lt;br /&gt;
       throw xTooBig(size);&lt;br /&gt;
    if (size &amp;lt;1)&lt;br /&gt;
       throw xNegative(size);&lt;br /&gt;
    if (size &amp;lt; 10)&lt;br /&gt;
        throw xTooSmall(size);&lt;br /&gt;
     pType = new int[size];&lt;br /&gt;
     for (int i = 0; i&amp;lt;size; i++)&lt;br /&gt;
       pType[i] = 0;&lt;br /&gt;
  }&lt;br /&gt;
  int&amp;amp; Array::operator[] (int offSet)&lt;br /&gt;
  {&lt;br /&gt;
      int size = GetitsSize();&lt;br /&gt;
      if (offSet &amp;gt;= 0 &amp;amp;&amp;amp; offSet &amp;lt; GetitsSize())&lt;br /&gt;
        return pType[offSet];&lt;br /&gt;
      throw xBoundary();&lt;br /&gt;
      return pType[0];&lt;br /&gt;
  }&lt;br /&gt;
  const int&amp;amp; Array::operator[] (int offSet) const&lt;br /&gt;
  {&lt;br /&gt;
      int size = GetitsSize();&lt;br /&gt;
      if (offSet &amp;gt;= 0 &amp;amp;&amp;amp; offSet &amp;lt; GetitsSize())&lt;br /&gt;
        return pType[offSet];&lt;br /&gt;
      throw xBoundary();&lt;br /&gt;
      return pType[0];&lt;br /&gt;
  }&lt;br /&gt;
   int main()&lt;br /&gt;
   {&lt;br /&gt;
      try&lt;br /&gt;
      {&lt;br /&gt;
         Array intArray(9);&lt;br /&gt;
         for (int j = 0; j&amp;lt; 100; j++)&lt;br /&gt;
         {&lt;br /&gt;
            intArray[j] = j;&lt;br /&gt;
            cout &amp;lt;&amp;lt; &amp;quot;intArray[&amp;quot; &amp;lt;&amp;lt; j &amp;lt;&amp;lt; &amp;quot;] okay...\n&amp;quot;;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
      catch (Array::xBoundary)&lt;br /&gt;
     {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Unable to process your input!\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
     catch (Array::xSize&amp;amp; theException)&lt;br /&gt;
     {&lt;br /&gt;
        theException.PrintError();&lt;br /&gt;
     }&lt;br /&gt;
     catch (...)&lt;br /&gt;
     {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Something went wrong!\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
     cout &amp;lt;&amp;lt; &amp;quot;Done.\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==sequence template==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
template &amp;lt;class T, int N&amp;gt;&lt;br /&gt;
class sequence {&lt;br /&gt;
    T memblock [N];&lt;br /&gt;
  public:&lt;br /&gt;
    void setmember (int x, T value);&lt;br /&gt;
    T getmember (int x);&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;class T, int N&amp;gt;&lt;br /&gt;
void sequence&amp;lt;T,N&amp;gt;::setmember (int x, T value) {&lt;br /&gt;
  memblock[x]=value;&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class T, int N&amp;gt;&lt;br /&gt;
T sequence&amp;lt;T,N&amp;gt;::getmember (int x) {&lt;br /&gt;
  return memblock[x];&lt;br /&gt;
}&lt;br /&gt;
int main () {&lt;br /&gt;
  sequence &amp;lt;int,5&amp;gt; myints;&lt;br /&gt;
  sequence &amp;lt;double,5&amp;gt; myfloats;&lt;br /&gt;
  myints.setmember (0,100);&lt;br /&gt;
  myfloats.setmember (3,3.1416);&lt;br /&gt;
  cout &amp;lt;&amp;lt; myints.getmember(0) &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; myfloats.getmember(3) &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==template class with generic parameter==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
template&amp;lt;class T&amp;gt; class Distance {&lt;br /&gt;
  public:&lt;br /&gt;
    Distance(T distance); &lt;br /&gt;
    void show_distance(void) { &lt;br /&gt;
       cout &amp;lt;&amp;lt; &amp;quot;The distance is &amp;quot; &amp;lt;&amp;lt; distance &amp;lt;&amp;lt; &amp;quot; miles\n&amp;quot;; &lt;br /&gt;
    };&lt;br /&gt;
  private:&lt;br /&gt;
    T distance;&lt;br /&gt;
};&lt;br /&gt;
template&amp;lt;class T&amp;gt;&lt;br /&gt;
Distance&amp;lt;T&amp;gt;::Distance(T distance) { Distance::distance = distance; };&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
    Distance&amp;lt;int&amp;gt; short_distance(100);&lt;br /&gt;
    Distance&amp;lt;long&amp;gt; long_distance(2000000L);&lt;br /&gt;
    short_distance.show_distance();&lt;br /&gt;
    long_distance.show_distance();&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==template class with two generic parameters==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
template &amp;lt;class T1, class T2&amp;gt; class two_gen {&lt;br /&gt;
   T1 i;&lt;br /&gt;
   T2 j;&lt;br /&gt;
 public:&lt;br /&gt;
   two_gen(T1 a, T2 b)&lt;br /&gt;
      { i=a; j=b;}&lt;br /&gt;
   void show(void)&lt;br /&gt;
      { cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; j &amp;lt;&amp;lt; endl; }&lt;br /&gt;
};&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
   two_gen&amp;lt;int, double&amp;gt; obj1(10, 0.23);&lt;br /&gt;
   two_gen&amp;lt;char, char *&amp;gt; obj2(&amp;quot;X&amp;quot;, &amp;quot;This is a test.&amp;quot;);&lt;br /&gt;
   obj1.show();&lt;br /&gt;
   obj2.show();&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==template class with type parameter==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
const int SIZE = 10;&lt;br /&gt;
template &amp;lt;class T&amp;gt; class MyClass {&lt;br /&gt;
   T a[SIZE];&lt;br /&gt;
 public:&lt;br /&gt;
   MyClass(void)&lt;br /&gt;
    {&lt;br /&gt;
      int i;&lt;br /&gt;
      for(i=0; i&amp;lt;SIZE; i++)&lt;br /&gt;
         a[i] = i;&lt;br /&gt;
    }&lt;br /&gt;
   T &amp;amp;operator[](int i);&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;class T&amp;gt; T &amp;amp;MyClass&amp;lt;T&amp;gt;::operator[](int i)&lt;br /&gt;
{&lt;br /&gt;
   if(i&amp;lt;0 || i&amp;gt; SIZE-1)&lt;br /&gt;
    {&lt;br /&gt;
      cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &amp;quot;Index value of &amp;quot;;&lt;br /&gt;
      cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; is out of bounds.&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
   return a[i];&lt;br /&gt;
}&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
   MyClass&amp;lt;int&amp;gt; int_array;&lt;br /&gt;
   MyClass&amp;lt;double&amp;gt; double_array;&lt;br /&gt;
   int i;&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Integer array: &amp;quot;;&lt;br /&gt;
   for(i=0; i&amp;lt;SIZE; i++)&lt;br /&gt;
      int_array[i] = i;&lt;br /&gt;
   for(i=0; i&amp;lt;SIZE; i++)&lt;br /&gt;
      cout &amp;lt;&amp;lt; int_array[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
   cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Double array: &amp;quot;;&lt;br /&gt;
   cout.precision(2);&lt;br /&gt;
   for(i=0; i&amp;lt;SIZE; i++)&lt;br /&gt;
      double_array[i] = (double)i/3;&lt;br /&gt;
   for(i=0; i&amp;lt;SIZE; i++)&lt;br /&gt;
      cout &amp;lt;&amp;lt; double_array[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
   cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
   int_array[12] = 100;                 // Calls overloaded array operator&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==template extending==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
class SimpleTemplate&lt;br /&gt;
{&lt;br /&gt;
 public:&lt;br /&gt;
  SimpleTemplate(T &amp;amp;inObject);&lt;br /&gt;
  const T&amp;amp; get();&lt;br /&gt;
  void set(T&amp;amp; inObject);&lt;br /&gt;
 protected:&lt;br /&gt;
  T&amp;amp; mObject;&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
SimpleTemplate&amp;lt;T&amp;gt;::SimpleTemplate(T &amp;amp;inObject) : mObject(inObject)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
const T&amp;amp; SimpleTemplate&amp;lt;T&amp;gt;::get()&lt;br /&gt;
{&lt;br /&gt;
  return mObject;&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
void SimpleTemplate&amp;lt;T&amp;gt;::set(T&amp;amp; inObject)&lt;br /&gt;
{&lt;br /&gt;
  mObject = inObject;&lt;br /&gt;
}&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
  int i = 7;&lt;br /&gt;
  SimpleTemplate&amp;lt;int&amp;gt; intWrapper(i);&lt;br /&gt;
  i = 2;&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;wrapper value is &amp;quot; &amp;lt;&amp;lt; intWrapper.get() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  string str = &amp;quot;test&amp;quot;;&lt;br /&gt;
  SimpleTemplate&amp;lt;string&amp;gt; stringWrapper(str);&lt;br /&gt;
  str += &amp;quot;!&amp;quot;;&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;wrapper value is &amp;quot; &amp;lt;&amp;lt; stringWrapper.get() &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Template Version of Generic binary sorted Tree.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include  &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include  &amp;lt;string.h&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
//A generic binary sorted tree.&lt;br /&gt;
template &amp;lt;class T&amp;gt;  class gen_tree;     //forward decl&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
class bnode {&lt;br /&gt;
private:&lt;br /&gt;
   friend class gen_tree&amp;lt;T&amp;gt;;&lt;br /&gt;
   bnode&amp;lt;T&amp;gt;*  left;&lt;br /&gt;
   bnode&amp;lt;T&amp;gt;*  right;&lt;br /&gt;
   T          data;&lt;br /&gt;
   int        count;&lt;br /&gt;
   bnode(T d, bnode&amp;lt;T&amp;gt;* l, bnode&amp;lt;T&amp;gt;* r) :&lt;br /&gt;
         data(d), left(l), right(r), count(1) { }&lt;br /&gt;
   void  print() const&lt;br /&gt;
      { cout &amp;lt;&amp;lt; data &amp;lt;&amp;lt; &amp;quot; : &amp;quot; &amp;lt;&amp;lt; count &amp;lt;&amp;lt; &amp;quot;\t&amp;quot;; }&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
class gen_tree {&lt;br /&gt;
public:&lt;br /&gt;
   gen_tree() { root = 0; }&lt;br /&gt;
   void  insert(T d);&lt;br /&gt;
   T  find(T d) const { return (find(root, d)); }&lt;br /&gt;
   void  print() const { print(root); }&lt;br /&gt;
private:&lt;br /&gt;
   bnode&amp;lt;T&amp;gt;*  root;&lt;br /&gt;
   T  find(bnode&amp;lt;T&amp;gt;* r, T d) const;&lt;br /&gt;
   void  print(bnode&amp;lt;T&amp;gt;* r) const;&lt;br /&gt;
};&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
void gen_tree&amp;lt;T&amp;gt;::insert(T d)&lt;br /&gt;
{&lt;br /&gt;
   bnode&amp;lt;T&amp;gt;*  temp = root;&lt;br /&gt;
   bnode&amp;lt;T&amp;gt;*  old;&lt;br /&gt;
   if (root == 0) {&lt;br /&gt;
      root = new bnode&amp;lt;T&amp;gt;(d, 0, 0);&lt;br /&gt;
      return;&lt;br /&gt;
   }&lt;br /&gt;
   while (temp != 0) {&lt;br /&gt;
      old = temp;&lt;br /&gt;
      if (comp(temp -&amp;gt; data, d) == 0) {&lt;br /&gt;
         (temp -&amp;gt; count)++;&lt;br /&gt;
         return;&lt;br /&gt;
      }&lt;br /&gt;
      if (comp(temp -&amp;gt; data, d) &amp;gt; 0)&lt;br /&gt;
         temp = temp -&amp;gt; left;&lt;br /&gt;
      else&lt;br /&gt;
         temp = temp -&amp;gt; right;&lt;br /&gt;
   }&lt;br /&gt;
   if (comp(old -&amp;gt; data, d) &amp;gt; 0)&lt;br /&gt;
      old -&amp;gt; left = new bnode&amp;lt;T&amp;gt;(d, 0, 0);&lt;br /&gt;
   else&lt;br /&gt;
      old -&amp;gt; right = new bnode&amp;lt;T&amp;gt;(d, 0, 0);&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
T gen_tree&amp;lt;T&amp;gt;::find(bnode&amp;lt;T&amp;gt;* r, T d) const&lt;br /&gt;
{&lt;br /&gt;
   if (r == 0)&lt;br /&gt;
      return 0;&lt;br /&gt;
   else if (comp(r -&amp;gt; data, d) ==  0)&lt;br /&gt;
      return (r -&amp;gt; data);&lt;br /&gt;
   else if (comp(r -&amp;gt; data, d) &amp;gt; 0)&lt;br /&gt;
      return (find( r -&amp;gt; left, d));&lt;br /&gt;
   else&lt;br /&gt;
      return (find( r -&amp;gt; right, d));&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
void gen_tree&amp;lt;T&amp;gt;::print(bnode&amp;lt;T&amp;gt; *r) const&lt;br /&gt;
{&lt;br /&gt;
   if (r != 0) {&lt;br /&gt;
      print( r -&amp;gt; left);&lt;br /&gt;
      r -&amp;gt; bnode&amp;lt;T&amp;gt;::print();&lt;br /&gt;
      print ( r -&amp;gt; right);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
template &amp;lt;class T&amp;gt;      //general case&lt;br /&gt;
int comp(T i, T j)&lt;br /&gt;
{&lt;br /&gt;
   if (i == j)          //assumes ==  &amp;lt; defined for T&lt;br /&gt;
      return 0;&lt;br /&gt;
   else&lt;br /&gt;
      return ( (i &amp;lt; j) ? -1 : 1 );&lt;br /&gt;
}&lt;br /&gt;
//specialization for const char*&lt;br /&gt;
int comp(const char* i, const char* j){&lt;br /&gt;
   return (strcmp(i, j));&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   char             dat[256];&lt;br /&gt;
   gen_tree&amp;lt;char*&amp;gt;  t;&lt;br /&gt;
   char*            p;&lt;br /&gt;
   while (cin&amp;gt;&amp;gt;dat){&lt;br /&gt;
      p = new char[strlen(dat) + 1];&lt;br /&gt;
      strcpy(p, dat);&lt;br /&gt;
      t.insert(p);&lt;br /&gt;
   }&lt;br /&gt;
   t.print();&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;EOF&amp;quot; &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;&lt;br /&gt;
   gen_tree&amp;lt;int&amp;gt;  i_tree;&lt;br /&gt;
   for (int i = 15; i &amp;gt; -5; --i)&lt;br /&gt;
      i_tree.insert(i);&lt;br /&gt;
   i_tree.print();&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Default Arguments with Template Classes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class T=int, int size=10&amp;gt; class MyClass {&lt;br /&gt;
  T a[size]; // size of array is passed in size&lt;br /&gt;
public:&lt;br /&gt;
  MyClass() {&lt;br /&gt;
    register int i;&lt;br /&gt;
    for(i=0; i&amp;lt;size; i++) a[i] = i;&lt;br /&gt;
  }&lt;br /&gt;
  T &amp;amp;operator[](int i);&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class T, int size&amp;gt;&lt;br /&gt;
T &amp;amp;MyClass&amp;lt;T, size&amp;gt;::operator[](int i)&lt;br /&gt;
{&lt;br /&gt;
  if(i&amp;lt;0 || i&amp;gt; size-1) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;\nIndex value of &amp;quot;;&lt;br /&gt;
    cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; is out-of-bounds.\n&amp;quot;;&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
  return a[i];&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  MyClass&amp;lt;int, 100&amp;gt; intarray;  &lt;br /&gt;
  MyClass&amp;lt;double&amp;gt; doublearray; &lt;br /&gt;
  MyClass&amp;lt;&amp;gt; defarray;          &lt;br /&gt;
   &lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;int array: &amp;quot;;&lt;br /&gt;
  for(int i=0; i&amp;lt;100; i++) intarray[i] = i;&lt;br /&gt;
  for(int i=0; i&amp;lt;100; i++) cout &amp;lt;&amp;lt; intarray[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
   &lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;double array: &amp;quot;;&lt;br /&gt;
  for(int i=0; i&amp;lt;10; i++) doublearray[i] = (double) i/3;&lt;br /&gt;
  for(int i=0; i&amp;lt;10; i++) cout &amp;lt;&amp;lt; doublearray[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
   &lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;defarray array: &amp;quot;;&lt;br /&gt;
  for(int i=0; i&amp;lt;10; i++) defarray[i] = i;&lt;br /&gt;
  for(int i=0; i&amp;lt;10; i++) cout &amp;lt;&amp;lt; defarray[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using exceptions with templates.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
const int DefaultSize = 10;&lt;br /&gt;
class xBoundary {};&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
class Array&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    Array(int itsSize = DefaultSize);&lt;br /&gt;
    Array(const Array &amp;amp;rhs);&lt;br /&gt;
    ~Array() { delete [] pType;}&lt;br /&gt;
    Array&amp;amp; operator=(const Array&amp;lt;T&amp;gt;&amp;amp;);&lt;br /&gt;
    T&amp;amp; operator[](int offSet);&lt;br /&gt;
    const T&amp;amp; operator[](int offSet) const;&lt;br /&gt;
    int GetitsSize() const { return itsSize; }&lt;br /&gt;
    friend ostream&amp;amp; operator&amp;lt;&amp;lt; (ostream&amp;amp;, const Array&amp;lt;T&amp;gt;&amp;amp;);&lt;br /&gt;
    class xSize {};&lt;br /&gt;
 private:&lt;br /&gt;
    int *pType;&lt;br /&gt;
    int  itsSize;&lt;br /&gt;
 };&lt;br /&gt;
 template &amp;lt;class T&amp;gt;&lt;br /&gt;
 Array&amp;lt;T&amp;gt;::Array(int size):&lt;br /&gt;
 itsSize(size)&lt;br /&gt;
 {&lt;br /&gt;
    if (size &amp;lt;10 || size &amp;gt; 30000)&lt;br /&gt;
       throw xSize();&lt;br /&gt;
    pType = new T[size];&lt;br /&gt;
    for (int i = 0; i&amp;lt;size; i++)&lt;br /&gt;
      pType[i] = 0;&lt;br /&gt;
 }&lt;br /&gt;
 template &amp;lt;class T&amp;gt;&lt;br /&gt;
 Array&amp;lt;T&amp;gt;&amp;amp; Array&amp;lt;T&amp;gt;::operator=(const Array&amp;lt;T&amp;gt; &amp;amp;rhs)&lt;br /&gt;
 {&lt;br /&gt;
    if (this == &amp;amp;rhs)&lt;br /&gt;
       return *this;&lt;br /&gt;
    delete [] pType;&lt;br /&gt;
    itsSize = rhs.GetitsSize();&lt;br /&gt;
    pType = new T[itsSize];&lt;br /&gt;
    for (int i = 0; i&amp;lt;itsSize; i++)&lt;br /&gt;
       pType[i] = rhs[i];&lt;br /&gt;
 }&lt;br /&gt;
 template &amp;lt;class T&amp;gt;&lt;br /&gt;
 Array&amp;lt;T&amp;gt;::Array(const Array&amp;lt;T&amp;gt; &amp;amp;rhs)&lt;br /&gt;
 {&lt;br /&gt;
    itsSize = rhs.GetitsSize();&lt;br /&gt;
    pType = new T[itsSize];&lt;br /&gt;
    for (int i = 0; i&amp;lt;itsSize; i++)&lt;br /&gt;
       pType[i] = rhs[i];&lt;br /&gt;
 }&lt;br /&gt;
 template &amp;lt;class T&amp;gt;&lt;br /&gt;
 T&amp;amp; Array&amp;lt;T&amp;gt;::operator[](int offSet)&lt;br /&gt;
 {&lt;br /&gt;
    int size = GetitsSize();&lt;br /&gt;
    if (offSet &amp;gt;= 0 &amp;amp;&amp;amp; offSet &amp;lt; GetitsSize())&lt;br /&gt;
       return pType[offSet];&lt;br /&gt;
    throw xBoundary();&lt;br /&gt;
    return pType[0];&lt;br /&gt;
 }&lt;br /&gt;
 template &amp;lt;class T&amp;gt;&lt;br /&gt;
 const T&amp;amp; Array&amp;lt;T&amp;gt;::operator[](int offSet) const&lt;br /&gt;
 {&lt;br /&gt;
    int mysize = GetitsSize();&lt;br /&gt;
    if (offSet &amp;gt;= 0 &amp;amp;&amp;amp; offSet &amp;lt; GetitsSize())&lt;br /&gt;
       return pType[offSet];&lt;br /&gt;
    throw xBoundary();&lt;br /&gt;
 }&lt;br /&gt;
 template &amp;lt;class T&amp;gt;&lt;br /&gt;
 ostream&amp;amp; operator&amp;lt;&amp;lt; (ostream&amp;amp; output, const Array&amp;lt;T&amp;gt;&amp;amp; theArray)&lt;br /&gt;
 {&lt;br /&gt;
    for (int i = 0; i&amp;lt;theArray.GetitsSize(); i++)&lt;br /&gt;
       output &amp;lt;&amp;lt; &amp;quot;[&amp;quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot;] &amp;quot; &amp;lt;&amp;lt; theArray[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
    return output;&lt;br /&gt;
 }&lt;br /&gt;
int main(){&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
       Array&amp;lt;int&amp;gt; intArray(9);&lt;br /&gt;
       for (int j = 0; j&amp;lt; 100; j++)&lt;br /&gt;
        {&lt;br /&gt;
           intArray[j] = j;&lt;br /&gt;
           cout &amp;lt;&amp;lt; &amp;quot;intArray[&amp;quot; &amp;lt;&amp;lt; j &amp;lt;&amp;lt; &amp;quot;] okay...&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
     catch (xBoundary)&lt;br /&gt;
     {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Unable to process your input!\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
     catch (Array&amp;lt;int&amp;gt;::xSize)&lt;br /&gt;
     {&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Bad Size!\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
     cout &amp;lt;&amp;lt; &amp;quot;Done.\n&amp;quot;;&lt;br /&gt;
     return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using Non-Type Arguments with Generic Classes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;   &lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class T, int size&amp;gt; class MyClass {&lt;br /&gt;
  T a[size]; // length of array is passed in size&lt;br /&gt;
public:&lt;br /&gt;
  MyClass() {&lt;br /&gt;
    register int i;&lt;br /&gt;
    for(i=0; i&amp;lt;size; i++) a[i] = i;&lt;br /&gt;
  }&lt;br /&gt;
  T &amp;amp;operator[](int i);&lt;br /&gt;
};&lt;br /&gt;
   &lt;br /&gt;
template &amp;lt;class T, int size&amp;gt;&lt;br /&gt;
T &amp;amp;MyClass&amp;lt;T, size&amp;gt;::operator[](int i)&lt;br /&gt;
{&lt;br /&gt;
  if(i&amp;lt;0 || i&amp;gt; size-1) {&lt;br /&gt;
    cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; is out-of-bounds.\n&amp;quot;;&lt;br /&gt;
    exit(1);&lt;br /&gt;
  }&lt;br /&gt;
  return a[i];&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  MyClass&amp;lt;int, 10&amp;gt; intob;       &lt;br /&gt;
  MyClass&amp;lt;double, 15&amp;gt; doubleob; &lt;br /&gt;
   &lt;br /&gt;
  for(int i=0; i&amp;lt;10; i++) &lt;br /&gt;
     intob[i] = i;&lt;br /&gt;
  for(int i=0; i&amp;lt;10; i++) &lt;br /&gt;
     cout &amp;lt;&amp;lt; intob[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
   &lt;br /&gt;
  for(int i=0; i&amp;lt;15; i++) &lt;br /&gt;
     doubleob[i] = (double) i/3;&lt;br /&gt;
  for(int i=0; i&amp;lt;15; i++) &lt;br /&gt;
     cout &amp;lt;&amp;lt; doubleob[i] &amp;lt;&amp;lt; &amp;quot;  &amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>