summaryrefslogtreecommitdiff
path: root/C++_from_the_Ground/Chapter_13.ipynb
diff options
context:
space:
mode:
Diffstat (limited to 'C++_from_the_Ground/Chapter_13.ipynb')
-rw-r--r--C++_from_the_Ground/Chapter_13.ipynb883
1 files changed, 883 insertions, 0 deletions
diff --git a/C++_from_the_Ground/Chapter_13.ipynb b/C++_from_the_Ground/Chapter_13.ipynb
new file mode 100644
index 00000000..6d12a5a7
--- /dev/null
+++ b/C++_from_the_Ground/Chapter_13.ipynb
@@ -0,0 +1,883 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:be0df45a07fa8844875025463a4211b5faab9834d4e1dd155b475b36ae6ea27e"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h1>Chapter 13: Operator Overloading<h1>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.1, Page Number: 300<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class three_d:\n",
+ " def __init__(self,i=None,j=None,k=None):\n",
+ " if i==None:\n",
+ " self.x=self.y=self.z=0\n",
+ " else:\n",
+ " self.x=i\n",
+ " self.y=j\n",
+ " self.z=k\n",
+ " #Overload +\n",
+ " def __add__(self,op2):\n",
+ " temp=three_d()\n",
+ " temp.x=self.x + op2.x #These are integer additions\n",
+ " temp.y=self.y + op2.y #and the + retains its original\n",
+ " temp.z=self.z + op2.z #meaning relative to them.\n",
+ " return temp\n",
+ " #Overload assignment\n",
+ " def __assign__(self,op2):\n",
+ " self.x=op2.x #These are integer assignments\n",
+ " self.y=op2.y #and the = retains its original \n",
+ " self.z=op2.z #meaning relative to them\n",
+ " return self\n",
+ " #Show x,y,z coordinates\n",
+ " def show(self):\n",
+ " print self.x,\",\",self.y,\",\",self.z\n",
+ " \n",
+ "#Variable declaration\n",
+ "a=three_d(1,2,3)\n",
+ "b=three_d(10,10,10)\n",
+ "c=three_d()\n",
+ "\n",
+ "a.show()\n",
+ "b.show()\n",
+ "\n",
+ "#add a and b together\n",
+ "c=a+b\n",
+ "c.show()\n",
+ "\n",
+ "#add a,b and c together\n",
+ "c=a+b+c\n",
+ "c.show()\n",
+ "\n",
+ "#demonstrate multiple assignment\n",
+ "c=b=a\n",
+ "c.show()\n",
+ "b.show()\n",
+ " \n",
+ " "
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "1 , 2 , 3\n",
+ "10 , 10 , 10\n",
+ "11 , 12 , 13\n",
+ "22 , 24 , 26\n",
+ "1 , 2 , 3\n",
+ "1 , 2 , 3\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.2, Page Number: 303<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class three_d:\n",
+ " def __init__(self,i=None,j=None,k=None):\n",
+ " if i==None:\n",
+ " self.x=self.y=self.z=0\n",
+ " else:\n",
+ " self.x=i\n",
+ " self.y=j\n",
+ " self.z=k\n",
+ " #Overload +\n",
+ " def __add__(self,op2):\n",
+ " temp=three_d()\n",
+ " temp.x=self.x + op2.x #These are integer additions\n",
+ " temp.y=self.y + op2.y #and the + retains its original\n",
+ " temp.z=self.z + op2.z #meaning relative to them.\n",
+ " return temp\n",
+ " #Overload assignment\n",
+ " def __assign__(self,op2):\n",
+ " self.x=op2.x #These are integer assignments\n",
+ " self.y=op2.y #and the = retains its original \n",
+ " self.z=op2.z #meaning relative to them\n",
+ " return self\n",
+ " #Overload the increment operator\n",
+ " def __iadd__(self,op2):\n",
+ " self.x+=op2\n",
+ " self.y+=op2\n",
+ " self.z+=op2\n",
+ " return self\n",
+ " #Show x,y,z coordinates\n",
+ " def show(self):\n",
+ " print self.x,\",\",self.y,\",\",self.z\n",
+ " \n",
+ "a=three_d(1,2,3)\n",
+ "b=three_d(10,10,10)\n",
+ "c=three_d()\n",
+ "\n",
+ "a.show()\n",
+ "b.show()\n",
+ "\n",
+ "#add a and b together\n",
+ "c=a+b\n",
+ "c.show()\n",
+ "\n",
+ "#add a,b and c together\n",
+ "c=a+b+c\n",
+ "c.show()\n",
+ "\n",
+ "#demonstrate multiple assignment\n",
+ "c=b=a\n",
+ "c.show()\n",
+ "b.show()\n",
+ " \n",
+ "#Increment c\n",
+ "c+=1\n",
+ "c.show()\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "1 , 2 , 3\n",
+ "10 , 10 , 10\n",
+ "11 , 12 , 13\n",
+ "22 , 24 , 26\n",
+ "1 , 2 , 3\n",
+ "1 , 2 , 3\n",
+ "2 , 3 , 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.3, Page Number: 306<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class three_d:\n",
+ " def __init__(self,i=None,j=None,k=None):\n",
+ " if i==None:\n",
+ " self.x=self.y=self.z=0\n",
+ " else:\n",
+ " self.x=i\n",
+ " self.y=j\n",
+ " self.z=k\n",
+ " #Overload +\n",
+ " def __add__(self,op2):\n",
+ " temp=three_d()\n",
+ " temp.x=self.x + op2.x #These are integer additions\n",
+ " temp.y=self.y + op2.y #and the + retains its original\n",
+ " temp.z=self.z + op2.z #meaning relative to them.\n",
+ " return temp\n",
+ " #Overload assignment\n",
+ " def __assign__(self,op2):\n",
+ " self.x=op2.x #These are integer assignments\n",
+ " self.y=op2.y #and the = retains its original \n",
+ " self.z=op2.z #meaning relative to them\n",
+ " return self\n",
+ " #Overload the increment operator\n",
+ " def __iadd__(self,op2):\n",
+ " self.x+=op2\n",
+ " self.y+=op2\n",
+ " self.z+=op2\n",
+ " return self\n",
+ " #Show x,y,z coordinates\n",
+ " def show(self):\n",
+ " print self.x,\",\",self.y,\",\",self.z\n",
+ " \n",
+ "a=three_d(1,2,3)\n",
+ "b=three_d(10,10,10)\n",
+ "c=three_d()\n",
+ "\n",
+ "a.show()\n",
+ "b.show()\n",
+ "\n",
+ "#add a and b together\n",
+ "c=a+b\n",
+ "c.show()\n",
+ "\n",
+ "#add a,b and c together\n",
+ "c=a+b+c\n",
+ "c.show()\n",
+ "\n",
+ "#demonstrate multiple assignment\n",
+ "c=b=a\n",
+ "c.show()\n",
+ "b.show()\n",
+ " \n",
+ "#Increment c (prefix)\n",
+ "c+=1\n",
+ "c.show()\n",
+ "\n",
+ "#Increment c (postfix)\n",
+ "c+=1\n",
+ "c.show()\n",
+ "\n",
+ "#Implementing prefix\n",
+ "c+=1\n",
+ "a=c\n",
+ "a.show()\n",
+ "c.show()\n",
+ "\n",
+ "#Implementing postfix\n",
+ "a=c\n",
+ "a.show()\n",
+ "c+=1\n",
+ "c.show()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "1 , 2 , 3\n",
+ "10 , 10 , 10\n",
+ "11 , 12 , 13\n",
+ "22 , 24 , 26\n",
+ "1 , 2 , 3\n",
+ "1 , 2 , 3\n",
+ "2 , 3 , 4\n",
+ "3 , 4 , 5\n",
+ "4 , 5 , 6\n",
+ "4 , 5 , 6\n",
+ "4 , 5 , 6\n",
+ "5 , 6 , 7\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.4, Page Number: 310<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class three_d:\n",
+ " def __init__(self,i=None,j=None,k=None):\n",
+ " if i==None:\n",
+ " self.x=self.y=self.z=0\n",
+ " else:\n",
+ " self.x=i\n",
+ " self.y=j\n",
+ " self.z=k\n",
+ " #Overload +\n",
+ " def __add__(self,op2):\n",
+ " return add(self,op2)\n",
+ " #Overload assignment\n",
+ " def __assign__(self,op2):\n",
+ " self.x=op2.x #These are integer assignments\n",
+ " self.y=op2.y #and the = retains its original \n",
+ " self.z=op2.z #meaning relative to them\n",
+ " return self\n",
+ " #Show x,y,z coordinates\n",
+ " def show(self):\n",
+ " print self.x,\",\",self.y,\",\",self.z\n",
+ " \n",
+ "#friending the funcion\n",
+ "def add(op1,op2):\n",
+ " temp=three_d()\n",
+ " temp.x=op1.x + op2.x #These are integer additions\n",
+ " temp.y=op1.y + op2.y #and the + retains its original\n",
+ " temp.z=op1.z + op2.z #meaning relative to them.\n",
+ " return temp\n",
+ "\n",
+ "a=three_d(1,2,3)\n",
+ "b=three_d(10,10,10)\n",
+ "c=three_d()\n",
+ "\n",
+ "a.show()\n",
+ "b.show()\n",
+ "\n",
+ "#add a and b together\n",
+ "c=a+b\n",
+ "c.show()\n",
+ "\n",
+ "#add a,b and c together\n",
+ "c=a+b+c\n",
+ "c.show()\n",
+ "\n",
+ "#demonstrate multiple assignment\n",
+ "c=b=a\n",
+ "c.show()\n",
+ "b.show()\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "1 , 2 , 3\n",
+ "10 , 10 , 10\n",
+ "11 , 12 , 13\n",
+ "22 , 24 , 26\n",
+ "1 , 2 , 3\n",
+ "1 , 2 , 3\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.5, Page Number: 311<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class CL:\n",
+ " def __init__(self):\n",
+ " self.count=0\n",
+ " def __assign__(self,obj):\n",
+ " self.count=obj.count\n",
+ " return self\n",
+ " def __add__(self,i): \n",
+ " return add(self,i)\n",
+ " def __radd__(self,i):\n",
+ " return radd(self,i)\n",
+ "\n",
+ "#This handles ob + int\n",
+ "def add(ob,i):\n",
+ " temp=CL()\n",
+ " temp.count=ob.count+i\n",
+ " return temp\n",
+ " \n",
+ "#This handles int + ob \n",
+ "def radd(ob,i):\n",
+ " temp=CL()\n",
+ " temp.count=i+ob.count\n",
+ " return temp\n",
+ "\n",
+ "#Variable declaration\n",
+ "o=CL()\n",
+ "o.count = 10\n",
+ "\n",
+ "#Result\n",
+ "print o.count, #outputs 10\n",
+ "o=10+o\n",
+ "print o.count, #outputs 20\n",
+ "o=o+12\n",
+ "print o.count #outputs 32\n",
+ "\n",
+ "\n",
+ " "
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "10 20 32\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.6, Page Number: 314<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "class three_d:\n",
+ " def __init__(self,i=None,j=None,k=None):\n",
+ " if i==None:\n",
+ " self.x=self.y=self.z=0\n",
+ " else:\n",
+ " self.x=i\n",
+ " self.y=j\n",
+ " self.z=k\n",
+ " #Overload +\n",
+ " def __add__(self,op2):\n",
+ " return add(self,op2)\n",
+ " #Overload assignment\n",
+ " def __assign__(self,op2):\n",
+ " self.x=op2.x #These are integer assignments\n",
+ " self.y=op2.y #and the = retains its original \n",
+ " self.z=op2.z #meaning relative to them\n",
+ " return self\n",
+ " #Overload the increment operator\n",
+ " def __iadd__(self,op2):\n",
+ " return iadd(self,op2)\n",
+ " #Show x,y,z coordinates\n",
+ " def show(self):\n",
+ " print self.x,\",\",self.y,\",\",self.z\n",
+ "\n",
+ "#friending the funcion\n",
+ "def add(op1,op2):\n",
+ " temp=three_d()\n",
+ " temp.x=op1.x + op2.x #These are integer additions\n",
+ " temp.y=op1.y + op2.y #and the + retains its original\n",
+ " temp.z=op1.z + op2.z #meaning relative to them.\n",
+ " return temp\n",
+ "def iadd(op1,op2):\n",
+ " op1.x+=op2\n",
+ " op1.y+=op2\n",
+ " op1.z+=op2\n",
+ " return op1\n",
+ " \n",
+ "a=three_d(1,2,3)\n",
+ "b=three_d(10,10,10)\n",
+ "c=three_d()\n",
+ "\n",
+ "a.show()\n",
+ "b.show()\n",
+ "\n",
+ "#add a and b together\n",
+ "c=a+b\n",
+ "c.show()\n",
+ "\n",
+ "#add a,b and c together\n",
+ "c=a+b+c\n",
+ "c.show()\n",
+ "\n",
+ "#demonstrate multiple assignment\n",
+ "c=b=a\n",
+ "c.show()\n",
+ "b.show()\n",
+ " \n",
+ "#Increment c (prefix)\n",
+ "c+=1\n",
+ "c.show()\n",
+ "\n",
+ "#Increment c (postfix)\n",
+ "c+=1\n",
+ "c.show()\n",
+ "\n",
+ "#Implementing prefix\n",
+ "c+=1\n",
+ "a=c\n",
+ "a.show()\n",
+ "c.show()\n",
+ "\n",
+ "#Implementing postfix\n",
+ "a=c\n",
+ "a.show()\n",
+ "c+=1\n",
+ "c.show()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "1 , 2 , 3\n",
+ "10 , 10 , 10\n",
+ "11 , 12 , 13\n",
+ "22 , 24 , 26\n",
+ "1 , 2 , 3\n",
+ "1 , 2 , 3\n",
+ "2 , 3 , 4\n",
+ "3 , 4 , 5\n",
+ "4 , 5 , 6\n",
+ "4 , 5 , 6\n",
+ "4 , 5 , 6\n",
+ "5 , 6 , 7\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.7, Page Number: 318<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class sample:\n",
+ " def __init__(self,ob=0):\n",
+ " if isinstance(ob,int):\n",
+ " #Normal constructor\n",
+ " self.__s=\"\"\n",
+ " return\n",
+ " else:\n",
+ " #Copy constructor\n",
+ " self.__s=obj._sample__s\n",
+ " return\n",
+ " def __del__(self):\n",
+ " print \"Freeing s\"\n",
+ " def show(self):\n",
+ " print self.__s\n",
+ " def set(self,str):\n",
+ " self.__s=str\n",
+ " def __assign__(self,ob): #Overload assignment\n",
+ " self.s=ob._sample__s\n",
+ " return self\n",
+ " \n",
+ "def input():\n",
+ " str=sample()\n",
+ " instr=\"Hello\" #User input\n",
+ " str.set(instr)\n",
+ " return str\n",
+ "\n",
+ "ob=sample()\n",
+ "\n",
+ "#assign returned object to ob\n",
+ "ob=input()\n",
+ "\n",
+ "#Result\n",
+ "ob.show()\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Freeing s\n",
+ "Freeing s\n",
+ "Hello\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.8, Page Number: 321<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class atype:\n",
+ " def __init__(self):\n",
+ " self.__a=[]\n",
+ " for i in range(SIZE):\n",
+ " self.__a.append(i)\n",
+ " def a(self,i):\n",
+ " return self.__a[i]\n",
+ " \n",
+ "#Variable declaration\n",
+ "SIZE=3\n",
+ "ob=atype()\n",
+ "\n",
+ "#Result\n",
+ "print ob.a(2),\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "2\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.9, Page Number: 322<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class atype:\n",
+ " def __init__(self):\n",
+ " self.__a=[]\n",
+ " for i in range(SIZE):\n",
+ " self.__a.append(i)\n",
+ " def a(self,i,j=None):\n",
+ " if j==None:\n",
+ " return self.__a[i]\n",
+ " else:\n",
+ " self.__a[i]=j\n",
+ " \n",
+ "#Variable declaration\n",
+ "SIZE=3 \n",
+ "ob=atype()\n",
+ "\n",
+ "print ob.a(2), #displays 2\n",
+ "\n",
+ "ob.a(2,25)\n",
+ "\n",
+ "print ob.a(2) #now displays 25"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "2 25\n"
+ ]
+ }
+ ],
+ "prompt_number": 7
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.10, Page Number: 323<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "class atype:\n",
+ " def __init__(self):\n",
+ " self.__a=[]\n",
+ " for i in range(SIZE):\n",
+ " self.__a.append(i)\n",
+ " def a(self,i,j=None):\n",
+ " if (i<0 or i>SIZE-1):\n",
+ " print \"Index value of\",\n",
+ " print i,\"is out of bounds.\"\n",
+ " return\n",
+ " if j==None:\n",
+ " return self.__a[i]\n",
+ " else:\n",
+ " self.__a[i]=j\n",
+ " \n",
+ "#Variable declaration\n",
+ "SIZE=3 \n",
+ "ob=atype()\n",
+ "\n",
+ "print ob.a(2), #displays 2\n",
+ "\n",
+ "ob.a(2,25)\n",
+ "\n",
+ "print ob.a(2) #now displays 25\n",
+ "\n",
+ "ob.a(44,3) #generates runtime error, 3 out of bounds"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "2 25\n",
+ "Index value of 44 is out of bounds.\n"
+ ]
+ }
+ ],
+ "prompt_number": 9
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.11, Page Number: 324<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "\n",
+ "class three_d:\n",
+ " def __init__(self,i=None,j=None,k=None):\n",
+ " if i==None:\n",
+ " self.x=self.y=self.z=0 #3-D coordinates\n",
+ " else:\n",
+ " self.x=i\n",
+ " self.y=j\n",
+ " self.z=k\n",
+ " #Show X,Y,Z coordinates\n",
+ " def show(self):\n",
+ " print self.x,\",\",self.y,\",\",self.z\n",
+ " #Overload ()\n",
+ " def a(self,a,b,c):\n",
+ " temp = three_d()\n",
+ " temp.x=self.x+a\n",
+ " temp.y=self.y+b\n",
+ " temp.z=self.z+c\n",
+ " return temp\n",
+ " \n",
+ "#Variable declaration\n",
+ "ob1=three_d(1,2,3)\n",
+ "\n",
+ "ob2=ob1.a(10,11,12) #invoke operator ()\n",
+ "\n",
+ "#Result\n",
+ "print \"ob1: \",\n",
+ "ob1.show()\n",
+ "print \"ob2: \",\n",
+ "ob2.show()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "ob1: 1 , 2 , 3\n",
+ "ob2: 11 , 13 , 15\n"
+ ]
+ }
+ ],
+ "prompt_number": 10
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example 13.12, Page Number: 326<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "class str_type:\n",
+ " def __init__(self,str=\"\"):\n",
+ " self.__string=str\n",
+ " #String concatenation\n",
+ " def __add__(self,str):\n",
+ " temp=str_type()\n",
+ " if isinstance(str,str_type):\n",
+ " temp.__string=self.__string+str.__string\n",
+ " else:\n",
+ " temp.__string=self.__string+str\n",
+ " return temp\n",
+ " #String copy\n",
+ " def __assign__(self,str):\n",
+ " if isinstance(str,str_type):\n",
+ " self.__string=str.__string\n",
+ " else:\n",
+ " self.__string=str\n",
+ " return self\n",
+ " def show_str(self):\n",
+ " print self.__string\n",
+ " \n",
+ "a=str_type(\"Hello \")\n",
+ "b=str_type(\"There\")\n",
+ "c=a+b\n",
+ "c.show_str()\n",
+ "\n",
+ "a=str_type(\"to program in because\")\n",
+ "a.show_str()\n",
+ "\n",
+ "b=c=str_type(\"C++ is fun\")\n",
+ "\n",
+ "c=c+\" \"+a+\" \"+b\n",
+ "c.show_str()\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Hello There\n",
+ "to program in because\n",
+ "C++ is fun to program in because C++ is fun\n"
+ ]
+ }
+ ],
+ "prompt_number": 12
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file