Can anyone point out what is wrong with the following code. I add 3 container objects to the ship object. When I try to get any container object back from the ship object it always returnd the last container object that was added.
Thanks
Thanks
Code:
'PBWIN 9.00 - WinApi 05/2008 - XP Pro SP3 'OOP example by Steve Pringles ' ====================================================================================================== CLASS cContainer INSTANCE m_Width AS SINGLE INSTANCE m_Length AS SINGLE INSTANCE m_height AS SINGLE INTERFACE iContainer INHERIT IDISPATCH PROPERTY GET WIDTH () AS SINGLE PROPERTY = m_Width END PROPERTY PROPERTY SET WIDTH (BYVAL Value AS SINGLE) m_Width = Value END PROPERTY PROPERTY GET Length() AS SINGLE PROPERTY = m_Length END PROPERTY PROPERTY SET Length(BYVAL Value AS SINGLE) m_Length = Value END PROPERTY PROPERTY GET Height() AS SINGLE PROPERTY = m_Height END PROPERTY PROPERTY SET Height(BYVAL Value AS SINGLE) m_Height = Value END PROPERTY END INTERFACE END CLASS CLASS cShip INSTANCE m_ContainerCount AS WORD INSTANCE m_Volume AS SINGLE INSTANCE m_VolumeUsed AS SINGLE INSTANCE m_Containers() AS iContainer CLASS METHOD CREATE() REDIM m_Containers(0) AS INSTANCE iContainer END METHOD INTERFACE iShip INHERIT IDISPATCH METHOD SetMaxSize(BYVAL nLength AS SINGLE, BYVAL nWidth AS SINGLE, BYVAL nHeight AS SINGLE) m_Volume = nLength * nWidth * nHeight END METHOD METHOD AddContainer(BYVAL iC AS iContainer) AS LONG LOCAL ContainerVolume AS SINGLE IF ISOBJECT(iC) THEN IF IC.Width AND iC.Height AND iC.Length THEN ContainerVolume = iC.Width * iC.Height * iC.Length IF ContainerVolume + m_VolumeUsed <= m_Volume THEN INCR m_ContainerCount REDIM PRESERVE m_Containers(m_ContainerCount - 1) AS INSTANCE iContainer m_Containers(m_ContainerCount - 1) = iC m_VolumeUsed = m_VolumeUsed + ContainerVolume METHOD = 1 ELSE METHOD = 0 END IF END IF END IF END METHOD METHOD GetVolumeUsed() AS SINGLE METHOD = m_VolumeUsed END METHOD METHOD GetCapacityLeft() AS SINGLE METHOD = m_Volume - m_VolumeUsed END METHOD METHOD GetContainerCount() AS WORD METHOD = m_ContainerCount END METHOD METHOD GetContainer(BYVAL nItem AS WORD) AS iContainer IF nItem > 0 AND nItem <= m_ContainerCount THEN METHOD = m_Containers(nItem - 1) ELSE METHOD = NOTHING END IF END METHOD END INTERFACE END CLASS FUNCTION PBMAIN() AS LONG LOCAL cCont AS iContainer LOCAL cBoat AS iShip LOCAL s$ cBoat = CLASS "cShip" cCont = CLASS "cContainer" cBoat.SetMaxSize(20, 20, 40) cCont.Length = 1 cCont.Width = 1 cCont.Height = 1 cBoat.AddContainer(cCont) cCont.Length = 2 cCont.Width = 2 cCont.Height = 2 cBoat.AddContainer(cCont) cCont.Length = 3 cCont.Width = 3 cCont.Height = 3 cBoat.AddContainer(cCont) s$ = "Str$(cBoat.GetContainerCount()) = " & STR$(cBoat.GetContainerCount()) & $CRLF cCont = cBoat.GetContainer(1) s$ = s$ & "Volume used : " & FORMAT$(cBoat.GetVolumeUsed) & " square feet" & $CRLF s$ = s$ & "Capacity left: " & FORMAT$(cBoat.GetCapacityLeft) & " square feet" & $CRLF s$ = s$ & "Width of first container = " & FORMAT$(cCont.Width) & $CRLF cCont = cBoat.GetContainer(2) s$ = s$ & "Width of Second container = " & FORMAT$(cCont.Width) & $CRLF cCont = cBoat.GetContainer(3) s$ = s$ & "Width of Third container = " & FORMAT$(cCont.Width) & $CRLF ?s$ END FUNCTION
Comment