# C++: Constructors

When an object of a class is created, C++ calls the constructor for that class. If no constructor is defined, C++ invokes a default constructor, which allocates memory for the object, but doesn't initialize it.

## Why you should define a constructor

Uninitialized member fields have garbage in them. This creates the possibility of a serious bug (eg, an uninitialized pointer, illegal values, inconsistent values, ...).

## Declaring a constructor

A constructor is similar to a function, but with the following differences.

- No return type.
- No return statement.

Example [extracts from three different files].

    //=== point/point.h =================================================
    #ifndef POINT_H
    #define POINT_H
    class Point {
        public:
            Point();  // parameterless default constructor
            Point(int new_x, int new_y); //  constructor with parameters
            int getX();
            int getY();
        private:
            int x;
            int y;
    };
    #endif

Here is part of the implementation file.

    //=== point/point.cpp ==============================================
    . . .
    Point::Point() {  // default constructor
        x = 0;
        y = 0;
    }

    Point::Point(int new_x, int new_y) {  // constructor
        x = new_x;
        y = new_y;
    }
    . . .

And here is part of a file that uses the Point class.

    //=== point/main.cpp ==============================================
       . . .
       Point p;              // calls our default constructor
       Point q(10,20);       // calls constructor with parameters
       Point* r = new Point();  // calls default constructor
       Point s = p;          // our default constructor not called.
       . . .