{
 "metadata": {
  "name": "",
  "signature": "sha256:64b755d597a2016634dadbbc81a598a60446119cc89f4f94fd9140b5bc077b77"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Chapter 11: Object Initialization and clean up"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example- bag.cpp, Page-392"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "MAX_ITEMS=25\n",
      "def show(self):\n",
      "    for i in range(self.ItemCount):\n",
      "        print self._Bag__contents[i],\n",
      "class Bag:\n",
      "    __contents=[int]*MAX_ITEMS\n",
      "    __ItemCount=int\n",
      "    def SetEmpty(self):\n",
      "        self.ItemCount=0\n",
      "    def put(self,item):\n",
      "        self._Bag__contents[self.ItemCount]=item\n",
      "        self.ItemCount+=1\n",
      "    show=show\n",
      "bag=Bag() #object of class Bag\n",
      "bag.SetEmpty() #initialize the object\n",
      "while 1:\n",
      "    item=int(raw_input(\"\\nEnter Item Number to be put into the bag <0-no item>: \"))\n",
      "    if item==0:\n",
      "        break\n",
      "    bag.put(item)\n",
      "    print \"Items in bag:\",\n",
      "    bag.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Items in bag: 1"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 3\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag: 1 3"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag: 1 3 2"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 4\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag: 1 3 2 4"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 0\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example- newbag.cpp, Page-395"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "MAX_ITEMS=25 #size of array contents\n",
      "def show(self):\n",
      "    for i in range(self.ItemCount):\n",
      "        print self._Bag__contents[i],\n",
      "class Bag:\n",
      "    __contents=[int]*MAX_ITEMS #int 1D array\n",
      "    __ItemCount=int\n",
      "    def __init__(self): #Constructor\n",
      "        self.ItemCount=0\n",
      "    def put(self,item): #member function defined inside the class\n",
      "        self._Bag__contents[self.ItemCount]=item\n",
      "        self.ItemCount+=1\n",
      "    show=show #member function defined outside the class\n",
      "bag=Bag() #object of class Bag\n",
      "while 1:\n",
      "    item=int(raw_input(\"\\nEnter Item Number to be put into the bag <0-no item>: \"))\n",
      "    if item==0:\n",
      "        break\n",
      "    bag.put(item)\n",
      "    print \"Items in bag:\",\n",
      "    bag.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Items in bag: 1"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 3\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag: 1 3"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag: 1 3 2"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 4\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag: 1 3 2 4"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 0\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-test1.cpp, Page-396"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def __init__(self):\n",
      "    print \"Constructor of class test called\"\n",
      "class Test:\n",
      "    __init__=__init__ #Constructor\n",
      "G=Test()\n",
      "def func():\n",
      "    L=Test()\n",
      "    print \"Here's function func()\"\n",
      "X=Test()\n",
      "print \"main() function\"\n",
      "func()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Constructor of class test called\n",
        "Constructor of class test called\n",
        "main() function\n",
        "Constructor of class test called\n",
        "Here's function func()\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example- giftbag.cpp, Page- 398"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "MAX_ITEMS=25\n",
      "def show(self):\n",
      "    if self.ItemCount:\n",
      "        for i in range(self.ItemCount):\n",
      "            print self._Bag__contents[i],\n",
      "    else:\n",
      "        print \"Nil\"\n",
      "class Bag:\n",
      "    __contents=[int]*MAX_ITEMS\n",
      "    __ItemCount=int\n",
      "    def __init__(self, item=None): #parameterized constructor: Python does not support overloading of functions\n",
      "        if isinstance(item, int):\n",
      "            self._Bag__contents[0]=item\n",
      "            self.ItemCount=1\n",
      "        else:\n",
      "            self.ItemCount=0\n",
      "    def put(self,item):\n",
      "        self._Bag__contents[self.ItemCount]=item\n",
      "        self.ItemCount+=1\n",
      "    show=show\n",
      "bag1=Bag()\n",
      "bag2=Bag(4) #object created using the parameterized constructor\n",
      "print \"Gifted bag1 initially has:\",\n",
      "bag1.show()\n",
      "print \"Gifted bag2 initially has:\",\n",
      "bag2.show()\n",
      "while 1:\n",
      "    item=int(raw_input(\"\\nEnter Item Number to be put into the bag <0-no item>: \"))\n",
      "    if item==0:\n",
      "        break\n",
      "    bag2.put(item)\n",
      "    print \"Items in bag2:\",\n",
      "    bag2.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Gifted bag1 initially has: Nil\n",
        "Gifted bag2 initially has: 4"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag2: 4 1"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag2: 4 1 2"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 3\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Items in bag2: 4 1 2 3"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Enter Item Number to be put into the bag <0-no item>: 0\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-test.cpp, Page-400 "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def __init__(self):\n",
      "    print \"Constructor of class Test called\"\n",
      "def __del__(self):\n",
      "    print \"Destructor of class Test called\"\n",
      "class Test:\n",
      "    __init__=__init__ #Constructor\n",
      "    __del__=__del__ #Destructor\n",
      "x=Test()\n",
      "print \"Terminating main\""
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Constructor of class Test called\n",
        "Destructor of class Test called\n",
        "Terminating main\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-count.cpp, Page-401"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "nobjects=0\n",
      "nobj_alive=0\n",
      "class MyClass:\n",
      "    def __init__(self):\n",
      "        global nobjects #using the global nobjects\n",
      "        global nobj_alive #using the global nobj_alive\n",
      "        nobjects+=1\n",
      "        nobj_alive+=1\n",
      "    def __del__(self):\n",
      "        global nobj_alive #using the global nobjects\n",
      "        nobj_alive-=1\n",
      "    def show(self):\n",
      "        global nobjects\n",
      "        global nobj_alive\n",
      "        print \"Total number of objects created: \", nobjects\n",
      "        print \"Number of objects currently alive: \", nobj_alive\n",
      "obj1=MyClass()\n",
      "obj1.show()\n",
      "def func():\n",
      "    obj1=MyClass()\n",
      "    obj2=MyClass()\n",
      "    obj2.show()\n",
      "    del obj1\n",
      "    del obj2\n",
      "func()\n",
      "obj1.show()\n",
      "obj2=MyClass()\n",
      "obj3=MyClass()\n",
      "obj2.show()\n",
      "del obj1\n",
      "del obj2\n",
      "del obj3"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Total number of objects created:  1\n",
        "Number of objects currently alive:  1\n",
        "Total number of objects created:  3\n",
        "Number of objects currently alive:  3\n",
        "Total number of objects created:  3\n",
        "Number of objects currently alive:  1\n",
        "Total number of objects created:  5\n",
        "Number of objects currently alive:  3\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Example-account.cpp, Page- 403"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def MoneyTransfer(self, acc , amount):\n",
      "        self._AccClass__balance=self._AccClass__balance-amount\n",
      "        acc._AccClass__balance=acc._AccClass__balance + amount\n",
      "class AccClass:\n",
      "    __accno=int\n",
      "    __balance=float\n",
      "    def __init__(self, an=None, bal=0.0):\n",
      "        if isinstance(an, int):\n",
      "            self.accno=an\n",
      "            self.__balance=bal\n",
      "        else:\n",
      "            self.accno=raw_input(\"Enter account number for acc1 object: \")\n",
      "            self.__balance=float(raw_input(\"Enter the balance: \"))\n",
      "    def display(self):\n",
      "        print \"Acoount number is: \", self.accno\n",
      "        print \"Balance is: \", self.__balance\n",
      "    MoneyTransfer=MoneyTransfer\n",
      "acc1=AccClass()\n",
      "acc2=AccClass(10)\n",
      "acc3=AccClass(20, 750.5)\n",
      "print \"Acoount information...\"\n",
      "acc1.display()\n",
      "acc2.display()\n",
      "acc3.display()\n",
      "trans_money=float(raw_input(\"How much money is to be transferred from acc3 to acc1: \"))\n",
      "acc3.MoneyTransfer(acc1, trans_money)\n",
      "print \"Updated information about accounts...\"\n",
      "acc1.display()\n",
      "acc2.display()\n",
      "acc3.display()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter account number for acc1 object: 1\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter the balance: 100\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Acoount information...\n",
        "Acoount number is:  1\n",
        "Balance is:  100.0\n",
        "Acoount number is:  10\n",
        "Balance is:  0.0\n",
        "Acoount number is:  20\n",
        "Balance is:  750.5\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "How much money is to be transferred from acc3 to acc1: 200\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Updated information about accounts...\n",
        "Acoount number is:  1\n",
        "Balance is:  300.0\n",
        "Acoount number is:  10\n",
        "Balance is:  0.0\n",
        "Acoount number is:  20\n",
        "Balance is:  550.5\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-test2.cpp. Page- 405"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def __init__(self, NameIn=None):\n",
      "    if isinstance(NameIn, str):\n",
      "        self.name=NameIn\n",
      "        print \"Test Object \", NameIn, \" created\"\n",
      "    else:\n",
      "        self.name=\"unnamed\"\n",
      "        print \"Test object 'unnamed' created\"\n",
      "def __del__(self):\n",
      "    print \"Test Object \", self.name, \" destroyed\"\n",
      "    del self.name\n",
      "class Test:\n",
      "    __name=[str]\n",
      "    __init__=__init__\n",
      "    __del__=__del__\n",
      "g=Test(\"global\")\n",
      "def func():\n",
      "    l=Test(\"func\")\n",
      "    print \"here's function func()\"\n",
      "x=Test(\"main\")\n",
      "func()\n",
      "print \"main() function - termination\""
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Test Object  global  created\n",
        "Test Object  global  destroyed\n",
        "Test Object  main  created\n",
        "Test Object  main  destroyed\n",
        "Test Object  func  created\n",
        "here's function func()\n",
        "Test Object  func  destroyed\n",
        "main() function - termination\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-complex1.cpp, Page- 407"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import math\n",
      "def add (self, c2):\n",
      "    temp=Complex()\n",
      "    temp._Complex__real=self._Complex__real+c2._Complex__real\n",
      "    temp._Complex__imag=self._Complex__imag+c2._Complex__imag\n",
      "    return temp\n",
      "class Complex:\n",
      "    __real=float\n",
      "    __imag=float\n",
      "    def __init__(self, real_in=None, imag_in=0.0):\n",
      "        if isinstance(real_in, float):\n",
      "            self.__real=real_in\n",
      "            self.__imag=imag_in\n",
      "        else:\n",
      "            self.__real=self.__imag=0.0\n",
      "    def show(self, msg):\n",
      "        print msg, \n",
      "        print self.__real,\n",
      "        if self.__imag<0:\n",
      "            print \"-i\",\n",
      "        else:\n",
      "            print \"+i\",\n",
      "        print math.fabs(self.__imag) #print absolute value\n",
      "    add=add\n",
      "c1=Complex(1.5,2.0)\n",
      "c2=Complex(2.2)\n",
      "c3=Complex()\n",
      "c1.show(\"c1=\")\n",
      "c2.show(\"c2=\")\n",
      "c3=c1.add(c2)\n",
      "c3.show(\"c3=c1.add(c2):\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "c1= 1.5 +i 2.0\n",
        "c2= 2.2 +i 0.0\n",
        "c3=c1.add(c2): 3.7 +i 2.0\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example- noname.cpp, Page- 410"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "class nameless:\n",
      "    __a=int\n",
      "    def __init__(self):\n",
      "        print \"Constructor\"\n",
      "    def __del__(self):\n",
      "        print \"Destructor\"\n",
      "nameless() #nameless object created\n",
      "n1=nameless()\n",
      "n2=nameless()\n",
      "print \"Program terminates\""
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Constructor\n",
        "Destructor\n",
        "Constructor\n",
        "Destructor\n",
        "Constructor\n",
        "Destructor\n",
        "Program terminates\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-name.cpp, Page-411"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def show(self, msg):\n",
      "    print msg\n",
      "    print \"First Name: \", self._name__first\n",
      "    if self._name__middle[0]:\n",
      "        print \"Middle Name: \", self._name__middle\n",
      "    if self._name__last[0]:\n",
      "        print \"Last Name: \", self._name__last\n",
      "class name:\n",
      "    __first=[None]*15\n",
      "    __middle=[None]*15\n",
      "    __last=[None]*15\n",
      "    def __init__(self, FirstName=None, MiddleName=None, LastName=None):\n",
      "        if isinstance(LastName, str):\n",
      "            self.__last=LastName\n",
      "            self.__middle=MiddleName\n",
      "            self.__first=FirstName\n",
      "        elif isinstance(MiddleName, str):\n",
      "            self.__middle=MiddleName\n",
      "            self.__first=FirstName\n",
      "        elif isinstance(FirstName, str):\n",
      "            self.__first=FirstName\n",
      "        else:\n",
      "            self.__last='\\0' #initialized to NULL\n",
      "            self.__middle='\\0'\n",
      "            self.__first='\\0'\n",
      "    show=show\n",
      "n1=name()\n",
      "n2=name()\n",
      "n3=name()\n",
      "n1=name(\"Rajkumar\")\n",
      "n2=name(\"Savithri\", \"S\")\n",
      "n3=name(\"Veugopal\", \"K\", \"R\")\n",
      "n1.show(\"First prson details...\")\n",
      "n2.show(\"Second prson details...\")\n",
      "n3.show(\"Third prson details...\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "First prson details...\n",
        "First Name:  Rajkumar\n",
        "Second prson details...\n",
        "First Name:  Savithri\n",
        "Middle Name:  S\n",
        "Third prson details...\n",
        "First Name:  Veugopal\n",
        "Middle Name:  K\n",
        "Last Name:  R\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-vector1.cpp, Page-413"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def read(self):\n",
      "    for i in range(self._vector__sz):\n",
      "        print \"Enter vector [\", i, \"]? \",\n",
      "        self._vector__v[i]=int(raw_input())\n",
      "def show_sum(self):\n",
      "    Sum=0\n",
      "    for i in range(self._vector__sz):\n",
      "        Sum+=self._vector__v[i]\n",
      "    print \"Vector sum= \", Sum\n",
      "class vector:\n",
      "    __v=[int] #array of type integer\n",
      "    __sz=int\n",
      "    def __init__(self, size):\n",
      "        self.__sz= size\n",
      "        self.__v=[int]*size #dynamically allocating size to integer array\n",
      "    def __del__(self):\n",
      "        del self.__v\n",
      "    read=read\n",
      "    show_sum=show_sum\n",
      "count = int\n",
      "count=int(raw_input(\"How many elements are there in the vector: \"))\n",
      "v1= vector(count)\n",
      "v1.read()\n",
      "v1.show_sum()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "How many elements are there in the vector: 5\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter vector [ 0 ]? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Enter vector [ 1 ]? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Enter vector [ 2 ]? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "3\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Enter vector [ 3 ]? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "4\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Enter vector [ 4 ]? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "5\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Vector sum=  15\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-vector2.cpp, Page-415"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def show(self):\n",
      "    for i in range(self._vector__size):\n",
      "        print self.elem(i), \", \",\n",
      "class vector:\n",
      "    __v=[int]\n",
      "    __size=int\n",
      "    def __init__(self, vector_size):\n",
      "        if isinstance(vector_size, int):\n",
      "            self.__size= vector_size\n",
      "            self.__v=[int]*vector_size\n",
      "        else:\n",
      "            print \"Copy construcor invoked\"\n",
      "            self.__size=vector_size.__size\n",
      "            self.__v=[int]*vector_size.__size\n",
      "            for i in range(vector_size.__size):\n",
      "                self.__v[i]=vector_size.__v[i]\n",
      "    def elem(self,i):\n",
      "        if i>=self.__size:\n",
      "            print \"Error: Out of Range\"\n",
      "            return -1\n",
      "        return self.__v[i]\n",
      "    def __del__(self):\n",
      "        del self.__v\n",
      "    show=show\n",
      "v1=vector(5)\n",
      "v2=vector(5)\n",
      "for i in range(5):\n",
      "    if v2.elem(i)!=-1:\n",
      "        v2._vector__v[i]=i+1\n",
      "v1=v2\n",
      "v3=vector(v2)\n",
      "print \"Vector v1: \",\n",
      "v1.show()\n",
      "print \"\\nvector v2: \",\n",
      "v2.show()\n",
      "print \"\\nvector v3: \",\n",
      "v3.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Copy construcor invoked\n",
        "Vector v1:  1 ,  2 ,  3 ,  4 ,  5 ,  \n",
        "vector v2:  1 ,  2 ,  3 ,  4 ,  5 ,  \n",
        "vector v3:  1 ,  2 ,  3 ,  4 ,  5 , \n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-matrix.cpp, Page-418"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "TRUE=1\n",
      "FALSE=0\n",
      "def __del__(self):\n",
      "    for i in range(self._matrix__MaxRow):\n",
      "        del self._matrix__p[i]\n",
      "    del self._matrix__p\n",
      "def add(self, a, b):\n",
      "    self._matrix__MaxRow=a._matrix__MaxRow\n",
      "    self._matrix__MaxCol=a._matrix__MaxCol\n",
      "    if (a._matrix__MaxRow!=b._matrix__MaxRow)|(a._matrix__MaxCol!=b._matrix__MaxCol):\n",
      "        print \"Error: invalid matrix order for addition\"\n",
      "        return\n",
      "    for i in range(self._matrix__MaxRow):\n",
      "        for j in range(self._matrix__MaxCol):\n",
      "            self._matrix__p[i][j]=a._matrix__p[i][j]+b._matrix__p[i][j]\n",
      "def sub(self, a, b):\n",
      "    self._matrix__MaxRow=a._matrix__MaxRow\n",
      "    self._matrix__MaxCol=a._matrix__MaxCol\n",
      "    if (a._matrix__MaxRow!=b._matrix__MaxRow)|(a._matrix__MaxCol!=b._matrix__MaxCol):\n",
      "        print \"Error: invalid matrix order for subtraction\"\n",
      "        return\n",
      "    for i in range(self._matrix__MaxRow):\n",
      "        for j in range(self._matrix__MaxCol):\n",
      "            self._matrix__p[i][j]=a._matrix__p[i][j]-b._matrix__p[i][j]\n",
      "def mul(self, a, b):\n",
      "    self._matrix__MaxRow=a._matrix__MaxRow\n",
      "    self._matrix__MaxCol=a._matrix__MaxCol\n",
      "    if (a._matrix__MaxCol!=b._matrix__MaxRow):\n",
      "        print \"Error: invalid matrix order for multiplication\"\n",
      "        return\n",
      "    for i in range(a._matrix__MaxRow):\n",
      "        for j in range(b._matrix__MaxCol):\n",
      "            self._matrix__p[i][j]=0\n",
      "            for k in range(a._matrix__MaxCol):\n",
      "                self._matrix__p[i][j]+=a._matrix__p[i][j]*b._matrix__p[i][j]\n",
      "def eql(self, b):\n",
      "    for i in range(self._matrix__MaxRow):\n",
      "        for j in range(self._matrix__MaxCol):\n",
      "            if self._matrix__p[i][i]!=b._matrix__p[i][j]:\n",
      "                return 0\n",
      "    return 1\n",
      "def read(self):\n",
      "    for i in range(self._matrix__MaxRow):\n",
      "        for j in range(self._matrix__MaxCol):\n",
      "            print \"Matrix[\", i, \",\",j,\"] =? \",\n",
      "            self._matrix__p[i][j]=int(raw_input())\n",
      "def show(self):\n",
      "    for i in range(self._matrix__MaxRow):\n",
      "        for j in range(self._matrix__MaxCol):\n",
      "            print self._matrix__p[i][j], \" \",\n",
      "        print \"\"\n",
      "class matrix:\n",
      "    __MaxRow=int\n",
      "    __MaxCol=int\n",
      "    __p=[int]\n",
      "    def __init__(self, row=0, col=0):\n",
      "        self.__MaxRow=row\n",
      "        self.__MaxCol=col\n",
      "        if row>0:\n",
      "            self.__p=[[int]*self.__MaxCol]*self.__MaxRow\n",
      "    __del__=__del__\n",
      "    read=read\n",
      "    show=show\n",
      "    add=add\n",
      "    sub=sub\n",
      "    mul=mul\n",
      "    eql=eql\n",
      "print \"Enter Matrix A details...\"\n",
      "m=int(raw_input(\"How many rows? \"))\n",
      "n=int(raw_input(\"How many columns? \"))\n",
      "a=matrix(m,n)\n",
      "a.read()\n",
      "print \"Enter Matrix B details...\"\n",
      "p=int(raw_input(\"How many rows? \"))\n",
      "q=int(raw_input(\"How many columns? \"))\n",
      "b=matrix(p,q)\n",
      "b.read()\n",
      "print \"Matrix A is...\"\n",
      "a.show()\n",
      "print \"Matrix B is...\"\n",
      "b.show()\n",
      "c=matrix(m,n)\n",
      "c.add(a,b)\n",
      "print \"C=A+B...\"\n",
      "c.show()\n",
      "d=matrix(m,n)\n",
      "d.sub(a,b)\n",
      "print \"D=A-B...\"\n",
      "d.show()\n",
      "e=matrix(m,q)\n",
      "e.mul(a,b)\n",
      "print \"E=A*B...\"\n",
      "e.show()\n",
      "print \"(Is matrix A equal to matrix B)? \",\n",
      "if(a.eql(b)):\n",
      "    print \"Yes\"\n",
      "else:\n",
      "    print \"No\""
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter Matrix A details...\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "How many rows? 3\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "How many columns? 3\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Matrix[ 0 , 0 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 0 , 1 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 0 , 2 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 1 , 0 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 1 , 1 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 1 , 2 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 2 , 0 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 2 , 1 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 2 , 2 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Enter Matrix B details...\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "How many rows? 3\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "How many columns? 3\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Matrix[ 0 , 0 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 0 , 1 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 0 , 2 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 1 , 0 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 1 , 1 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 1 , 2 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 2 , 0 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 2 , 1 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix[ 2 , 2 ] =? "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Matrix A is...\n",
        "2   2   2   \n",
        "2   2   2   \n",
        "2   2   2   \n",
        "Matrix B is...\n",
        "1   1   1   \n",
        "1   1   1   \n",
        "1   1   1   \n",
        "C=A+B...\n",
        "3   3   3   \n",
        "3   3   3   \n",
        "3   3   3   \n",
        "D=A-B...\n",
        "1   1   1   \n",
        "1   1   1   \n",
        "1   1   1   \n",
        "E=A*B...\n",
        "6   6   6   \n",
        "6   6   6   \n",
        "6   6   6   \n",
        "(Is matrix A equal to matrix B)?  No\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-person.cpp, Page-423"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def __init__(self, NameIn, AddressIn, PhoneIn):\n",
      "    self._Person__name=NameIn\n",
      "    self._Person__address=AddressIn\n",
      "    self._Person__phone=PhoneIn\n",
      "#inline\n",
      "def __del__(self):\n",
      "    del self._Person__name\n",
      "    del self._Person__address\n",
      "    del self._Person__phone\n",
      "def getname(self):\n",
      "    return self._Person__name\n",
      "def getaddress(self):\n",
      "    return self._Person__address\n",
      "def getphone(self):\n",
      "    return self._Person__phone\n",
      "def changename(self, NameIn):\n",
      "    if(self._Person__name):\n",
      "        del self._Person__name\n",
      "    self._Person__name=NameIn\n",
      "class Person:\n",
      "    __name=[str]\n",
      "    __address=[str]\n",
      "    __phone=[str]\n",
      "    __init__=__init__\n",
      "    __del__=__del__\n",
      "    getname=getname\n",
      "    getaddress=getaddress\n",
      "    getphone=getphone\n",
      "    changename=changename\n",
      "def printperson(p):\n",
      "    if(p.getname()):\n",
      "        print \"Name: \", p.getname()\n",
      "    if(p.getaddress()):\n",
      "        print \"Address: \", p.getaddress()\n",
      "    if(p.getphone()):\n",
      "        print \"Phone: \", p.getphone()\n",
      "me=Person(\"Rajkumar\", \"E-mail: raj@cdabc.erne.in\", \"91-080-5584271\")\n",
      "printperson(me)\n",
      "you=Person(\"XYZ\", \"-not sure-\", \"-not sure-\")\n",
      "print \"You XYZ by default...\"\n",
      "printperson(you)\n",
      "you.changename(\"ABC\")\n",
      "print \"You changed XYZ to ABC...\"\n",
      "printperson(you)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Name:  Rajkumar\n",
        "Address:  E-mail: raj@cdabc.erne.in\n",
        "Phone:  91-080-5584271\n",
        "You XYZ by default...\n",
        "Name:  XYZ\n",
        "Address:  -not sure-\n",
        "Phone:  -not sure-\n",
        "You changed XYZ to ABC...\n",
        "Name:  ABC\n",
        "Address:  -not sure-\n",
        "Phone:  -not sure-\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example-graph.cpp, Page-425"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def __init__(self):\n",
      "    if(self._Graphics__nobjects[0]==False):\n",
      "        self._Graphics__setgraphicsmode()\n",
      "    self._Graphics__nobjects[0]+=1\n",
      "def __del__(self):\n",
      "    self._Graphics__nobjects[0]-=1\n",
      "    if(self._Graphics__nobjects[0]==False):\n",
      "        self._Graphics__settextmode()\n",
      "class Graphics:\n",
      "    __nobjects=[0]\n",
      "    def __setgraphicsmode(self):\n",
      "        pass\n",
      "    def __settextmode(self):\n",
      "        pass\n",
      "    __init__=__init__\n",
      "    __del__=__del__\n",
      "    def getcount(self):\n",
      "        return self.__nobjects[0]\n",
      "def my_func():\n",
      "    obj=Graphics()\n",
      "    print \"No. of Graphics' objects while in my_func=\", obj.getcount()\n",
      "obj1=Graphics()\n",
      "print \"No. of Graphics' objects before in my_func=\", obj1.getcount()\n",
      "my_func()\n",
      "print \"No. of Graphics' objects after in my_func=\", obj1.getcount()\n",
      "obj2=Graphics()\n",
      "obj3=Graphics()\n",
      "obj4=Graphics()\n",
      "print \"Value of static member nobjects after all 3 more objects...\"\n",
      "print \"In obj1= \", obj1.getcount()\n",
      "print \"In obj2= \", obj2.getcount()\n",
      "print \"In obj3= \", obj3.getcount()\n",
      "print \"In obj4= \", obj4.getcount()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "No. of Graphics' objects before in my_func= 1\n",
        "No. of Graphics' objects while in my_func= 2\n",
        "No. of Graphics' objects after in my_func= 1\n",
        "Value of static member nobjects after all 3 more objects...\n",
        "In obj1=  4\n",
        "In obj2=  4\n",
        "In obj3=  4\n",
        "In obj4=  4\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example Page-428"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def distance(self, a, b):\n",
      "    self.x=a.x-b.x\n",
      "    self.y=a.y-b.y\n",
      "def display(self):\n",
      "    print \"x= \",self.x\n",
      "    print \"y= \", self.y\n",
      "class point:\n",
      "    __x=int\n",
      "    __y=int\n",
      "    def __init__(self, a=None, b=None):\n",
      "        if isinstance(a, int):\n",
      "            self.x=a\n",
      "            self.y=b\n",
      "        else:\n",
      "            self.x=self.y=0\n",
      "    def __del__(self):\n",
      "        pass\n",
      "    distance=distance\n",
      "    display=display\n",
      "p1=point(40,18)\n",
      "p2=point(12,9)\n",
      "p3=point()\n",
      "p3.distance(p1,p2)\n",
      "print \"Coordinates of P1: \"\n",
      "p1.display()\n",
      "print \"Coordinates of P2: \"\n",
      "p2.display()\n",
      "print \"distance between P1 and P2: \"\n",
      "p3.display()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Coordinates of P1: \n",
        "x=  40\n",
        "y=  18\n",
        "Coordinates of P2: \n",
        "x=  12\n",
        "y=  9\n",
        "distance between P1 and P2: \n",
        "x=  28\n",
        "y=  9\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example Page-430"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def display(self):\n",
      "    print \"a =\", self.a,\n",
      "    print \"b =\", self.b\n",
      "class data:\n",
      "    __a=int\n",
      "    __b=float\n",
      "    def __init__(self, x=None, y=None):\n",
      "        if isinstance(x, int):\n",
      "            self.a=x\n",
      "            self.b=y\n",
      "        elif isinstance(x, data):\n",
      "            self.a=x.a\n",
      "            self.b=x.b\n",
      "        else:\n",
      "            self.a=0\n",
      "            self.b=0\n",
      "    display=display\n",
      "d1=data()\n",
      "d2=data(12,9.9)\n",
      "d3=data(d2)\n",
      "print \"For default constructor: \"\n",
      "d1.display()\n",
      "print\"For parameterized constructor: \"\n",
      "d2.display()\n",
      "print \"For Copy Constructor: \"\n",
      "d3.display()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "For default constructor: \n",
        "a = 0 b = 0\n",
        "For parameterized constructor: \n",
        "a = 12 b = 9.9\n",
        "For Copy Constructor: \n",
        "a = 12 b = 9.9\n"
       ]
      }
     ],
     "prompt_number": 1
    }
   ],
   "metadata": {}
  }
 ]
}