FreeBasic Constructor Keyword
last modified June 16, 2025
The FreeBasic Constructor
keyword defines special methods that
initialize objects when they are created. Constructors are called automatically
when an instance of a user-defined type is declared.
Basic Definition
In FreeBasic, a Constructor
is a special member function of a
Type
(UDT) that is declared within the type definition and
implemented outside of it. It is executed when an object of that type is created.
Constructors can take parameters to initialize object members. They ensure
objects start in a valid state. FreeBasic supports both parameterless and
parameterized constructors. The constructor is declared using Declare Constructor
inside the Type, and defined using Constructor TypeName
outside the Type.
Simple Constructor
This example shows a basic parameterless constructor.
Type Person fname As String age As Integer Declare Constructor() End Type Constructor Person() fname = "Unknown" age = 0 Print "Person object created" End Constructor Dim p As Person Print "Name: "; p.fname Print "Age: "; p.age
Here we define a Person
type with a constructor declaration inside
the type and implementation outside. The Declare Constructor()
goes
inside the Type, while Constructor Person()
contains the actual code.
When we create a Person
object, the constructor runs automatically,
setting default values and printing a message.
Parameterized Constructor
Constructors can take parameters to initialize objects with specific values.
Type Rectangle width As Double height As Double Declare Constructor() Declare Constructor(w As Double, h As Double) End Type Constructor Rectangle() width = 0.0 height = 0.0 End Constructor Constructor Rectangle(w As Double, h As Double) width = w height = h Print "Rectangle created: "; width; "x"; height End Constructor Dim rect As Rectangle Ptr = New Rectangle(5.5, 3.2) Print "Area: "; rect->width * rect->height Delete rect
This Rectangle
type demonstrates constructor overloading with both
a default (parameterless) constructor and a parameterized constructor. To use
the parameterized constructor with specific values, we create the object dynamically
using New Rectangle(parameters)
. The parameterized constructor is
called during allocation, initializing the object with the provided dimensions.
We access members through the pointer and clean up with Delete
.
Multiple Constructors
FreeBasic allows defining multiple constructors with different parameters.
Type Book title As String author As String pages As Integer Declare Constructor() Declare Constructor(t As String, a As String, p As Integer) End Type Constructor Book() title = "Untitled" author = "Unknown" pages = 0 End Constructor Constructor Book(t As String, a As String, p As Integer) title = t author = a pages = p End Constructor Dim book1 As Book Dim book2 As Book Ptr = New Book("The Hobbit", "J.R.R. Tolkien", 310) Print "Book1: "; book1.title; " by "; book1.author Print "Book2: "; book2->title; " by "; book2->author Delete book2
The Book
type demonstrates constructor overloading by declaring
two constructors with Declare Constructor
. Each constructor is
implemented separately with Constructor Book
. The first book uses
the default constructor automatically, while the second book uses dynamic
allocation with New Book(parameters)
to call the parameterized
constructor. Note the different access patterns: direct member access for
stack objects and pointer access (->
) for heap objects.
Constructor with Member Initialization
Constructors can initialize members using more explicit syntax when needed.
Type Point x As Integer y As Integer Declare Constructor(x As Integer, y As Integer) End Type Constructor Point(x As Integer, y As Integer) This.x = x This.y = y End Constructor Dim pt As Point Ptr = New Point(10, 20) Print "Point coordinates: ("; pt->x; ", "; pt->y; ")" Delete pt
This Point
constructor demonstrates parameter name shadowing, where
the constructor parameters have the same names as the type members. The
This
keyword is used to distinguish between the member variables
(This.x
, This.y
) and the constructor parameters
(x
, y
). The object is created dynamically using
New Point(parameters)
, and we access members through the pointer
with the arrow operator.
Constructor with Dynamic Allocation
Constructors work with dynamically allocated objects.
Type Student fname As String grade As Integer Declare Constructor(n As String, g As Integer) End Type Constructor Student(n As String, g As Integer) fname = n grade = g Print "Student "; fname; " created" End Constructor Dim s As Student Ptr = New Student("Alice", 11) Print s->fname; " is in grade "; s->grade Delete s
Here we create a Student
object dynamically using New
.
The constructor is called automatically during allocation, initializing the
object with the provided parameters. We access members through the pointer
using the arrow operator (->
) and must remember to Delete
the object when done to free memory.
Constructor with Array Members
Constructors can initialize array members.
Type Inventory items(4) As String count As Integer Declare Constructor() End Type Constructor Inventory() For i As Integer = 0 To 4 items(i) = "Empty slot" Next count = 0 End Constructor Dim inv As Inventory For i As Integer = 0 To 4 Print i; ": "; inv.items(i) Next
The Inventory
constructor shows how to initialize array members
within a constructor. The parameterless constructor loops through all array
elements, setting each to "Empty slot", and initializes the count to zero.
This ensures that when an inventory object is created, all slots start in
a known, initialized state.
Constructor with Object Composition
Constructors can initialize objects that contain other objects.
Type Engine horsepower As Integer Declare Constructor() Declare Sub SetHorsepower(hp As Integer) End Type Constructor Engine() horsepower = 0 End Constructor Sub Engine.SetHorsepower(hp As Integer) horsepower = hp End Sub Type Car model As String engine As Engine Declare Constructor(m As String, hp As Integer) End Type Constructor Car(m As String, hp As Integer) model = m engine.SetHorsepower(hp) End Constructor Dim myCar As Car Ptr = New Car("Sedan", 150) Print myCar->model; " has "; myCar->engine.horsepower; " HP" Delete myCar
This example demonstrates object composition where the Car
type
contains an embedded Engine
object. The Engine
type
has a default constructor and a SetHorsepower
method to configure
its properties. The car is created dynamically using New Car(parameters)
,
which calls the car's constructor. The constructor initializes the model name
and uses the engine's SetHorsepower
method to configure the
embedded engine object. This approach shows how to work with composition
when direct parameterized constructor calls are complex.
Best Practices
- Initialization: Always initialize all member variables in constructors.
- Overloading: Use multiple constructors for different initialization scenarios.
- Validation: Validate constructor parameters when appropriate.
- Simplicity: Keep constructors simple; avoid complex logic.
- Documentation: Document constructor behavior and parameters.
This tutorial covered the FreeBasic Constructor
keyword with practical
examples showing its usage in different scenarios.
Author
List all FreeBasic Tutorials.