git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12108 626c5289-ae23-0410-ae9c-e8d60b6d4f22
63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
// This example illustrates how C++ classes can be used from Go using SWIG.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
. "./example"
|
|
)
|
|
|
|
func main() {
|
|
// ----- Object creation -----
|
|
|
|
fmt.Println("Creating some objects:")
|
|
c := NewCircle(10)
|
|
fmt.Println(" Created circle", c)
|
|
s := NewSquare(10)
|
|
fmt.Println(" Created square", s)
|
|
|
|
// ----- Access a static member -----
|
|
|
|
fmt.Println("\nA total of", GetShapeNshapes(), "shapes were created")
|
|
|
|
// ----- Member data access -----
|
|
|
|
// Notice how we can do this using functions specific to
|
|
// the 'Circle' class.
|
|
c.SetX(20)
|
|
c.SetY(30)
|
|
|
|
// Now use the same functions in the base class
|
|
var shape Shape = s
|
|
shape.SetX(-10)
|
|
shape.SetY(5)
|
|
|
|
fmt.Println("\nHere is their current position:")
|
|
fmt.Println(" Circle = (", c.GetX(), " ", c.GetY(), ")")
|
|
fmt.Println(" Square = (", s.GetX(), " ", s.GetY(), ")")
|
|
|
|
// ----- Call some methods -----
|
|
|
|
fmt.Println("\nHere are some properties of the shapes:")
|
|
shapes := []Shape{c, s}
|
|
for i := 0; i < len(shapes); i++ {
|
|
fmt.Println(" ", shapes[i])
|
|
fmt.Println(" area = ", shapes[i].Area())
|
|
fmt.Println(" perimeter = ", shapes[i].Perimeter())
|
|
}
|
|
|
|
// Notice how the area() and perimeter() functions really
|
|
// invoke the appropriate virtual method on each object.
|
|
|
|
// ----- Delete everything -----
|
|
|
|
fmt.Println("\nGuess I'll clean up now")
|
|
|
|
// Note: this invokes the virtual destructor
|
|
// You could leave this to the garbage collector
|
|
DeleteCircle(c)
|
|
DeleteSquare(s)
|
|
|
|
fmt.Println(GetShapeNshapes(), " shapes remain")
|
|
fmt.Println("Goodbye")
|
|
}
|