| // This example illustrates how C++ classes can be used from Go using SWIG. |
| |
| package main |
| |
| import ( |
| . "./example" |
| "fmt" |
| ) |
| |
| 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") |
| } |