/* C++ Classes and Objects Demo

Copyright © Robin Broad 2018

Free software published under GNU GPL

http://www.robinbroad.co.uk/

April 2018

*/

 

//Preprocessor instructions to the C++ compiler

//Include the standard C input/ output library

#include <iostream>

//Use the standard names in namespace std for the functions in the iostream library (e.g. cout). Without this, the compiler would not recognise the function cout, which we are using in this program

using namespace std;

//Include the standard C maths library. We need it to calculate the square root sqrt() in the lenSpaceDiag() member function of the Cuboid class

#include<math.h>

 

class Cuboid

/*Class name Cuboid. This class represents the three dimensional mathematical shape rectangular cuboid. It has six rectangular faces, 12 edges and 8 vertices. We will provide member functions for surface area, volume and the length of the space diagonal.

This code is heavily commented to assist students of C++

Author: Robin Broad

C++ Examples

http://www.robinbroad.co.uk/

April 2018

*/

{

        //*** Members ***      

        private:

        /*private means accessible only within the class (or by friends of the class); not publicly accessible.

        (This is also known as data hiding. This is part of the process of encapsulation; information hiding, data and methods)*/

 

        //Declaring the class members a, b and c.

        int a, b, c;

        /*Using the standard mathematical notation of a, b and c for the lengths of the sides of the cuboid

        int means "of type integer"*/

 

        //***Constructor ***

        /*The constructor is a member function with the same name as the class.

        It is called whenever an object (class instance) is created*/

        public:

        //public means these members or member functions can be accessed anywhere, including from outside the class

 

        //The Cuboid class constructor member function. This is passed the cuboid dimensions a, b and c.

        Cuboid(int fpa, int fpb, int fpc)

        //fpa=function parameter a etc.

        {

                /*Notifying us that the constructor has been called

                The insertion operator << specifies the string to be written to the console by cout

                The \n is the newline character*/

                cout << "Constructing a cuboid object of dimensions "<<fpa<<" x "<<fpb<<" x "<<fpc<<" units\n";

                //Allocate the passed values to the private member variables of the object (class instance)

                a = fpa;

                b = fpb;

                c = fpc;

        }

 

        //*** Destructor ***

        //The Cuboid class destructor member function. Destructs the object when it is no longer needed.

        //The tilde (~) symbol means "not".

        ~Cuboid()

        {

                //notifying us that the object is being destructed

                cout << "Destructing a cuboid object of dimensions "<<a<<" x "<<b<<" x "<<c<<" units\n";

        }

 

        //*** Member Functions ***

        //Defining the member functions for the Cuboid class

 

        int surfaceArea()

        /*Member function to calculate the surface area of the cuboid object

        Returns the answer as an integer. This in an inline member function (i.e. declared within the class)

        This could have been declared outside the class (outline member function) using the form:

        int Cuboid::surfaceArea() {...}

        (where :: represents the scope resolution operator)

        */

        {

                return 2*(a*b+a*c+b*c);

                /*surfaceArea = 2 x (a x b + a x c + b x c)

                This is a standard mathematical concept*/

        }

 

        int volume()

        /*Member function to calculate the volume of the cuboid object

        Returns the answer as an integer. This in an inline member function (i.e. declared within the class)

        This could have been declared outside the class (outline member function) using the form:

        int Cuboid::volume() {...}

        (where :: represents the scope resolution operator)

        */

        {

                return a*b*c;

                /*volume=a x b x c

                This is a standard mathematical concept*/

        }

 

        float lenSpaceDiag()

        /*Member function to calculate the length of the space diagonal of the cuboid object

        Note: returns the answer as a float as square root may not be an integer

        This in an inline member function (i.e. declared within the class)

        This could have been declared outside the class (outline member function) using the form:

        int Cuboid::lenSpaceDiag {...}

        (where :: represents the scope resolution operator)

        */

        {

                return sqrt(a*a+b*b+c*c);

                /*Length of space diagonal = square root(a^2 + b^2 + c^2)

                This is a standard mathematical concept*/

        }

};

//}; marks the end of the class definition

 

//*** Main program ***

int main()

{

        //Output Header

        cout <<"C++ Classes and Objects Demo\nRobin Broad\nMay 2018\n";

        /*This program demonstrates classes, objects, constructors, destructors and member functions in C++

        Classes - A class is a data type defined by the programmer, in this case Cuboid. The class has members (dimensions a,b and c) and member functions to return useful information about the object. The class describes the structure of all objects of that class.

        Objects - An object is an instance of a class. When an object is created (constructed or instantiated), memory is allocated to it.

        Constructor - A constructor is a member function used to initialise an object when it is created. The constructor is public and returns no value.

        Destructor - A member function used to remove the object from memory when it is no longer needed.

        Member functions - class functions that return useful information about objects of the class, in this case volume, surface area etc.*/

 

        //Create a cuboid object of dimensions 4 x 5 x 2

        //Objects can contain organised groups of data (in this case the dimensions of the cuboid) and member functions which return useful results about the object

        Cuboid cuboidA(4, 5, 2);

        //Create a second cuboid object

        Cuboid cuboidB(8, 12, 4);

        //Create a third cuboid object

        Cuboid cuboidC(5, 10, 3);

        //Call the member function surfaceArea() of cuboidA to find it's Surface area

        cout <<"Surface area of cuboid A is "<<cuboidA.surfaceArea()<<" units squared\n";

        //Call the member function volume() of cuboidB to find it's volume

        cout <<"Volume of cuboid B is "<<cuboidB.volume()<<" units cubed\n";

        //Call the member function lenSpaceDiag() of cuboidC to find the length of it's space diagonal

        cout <<"Length of the space diagonal of cuboid C is "<<cuboidC.lenSpaceDiag()<<" units\n";

        return 0;

}

 

/*This program produced the following output when compiled using the GNU GCC C++ compiler from within the Code::Blocks IDE running on an Ubuntu GNU/Linux operating system, by Robin Broad, Newcastle upon Tyne, UK, May 2018:

 

C++ Classes and Objects Demo

Robin Broad

May 2018

Constructing a cuboid object of dimensions 4 x 5 x 2 units

Constructing a cuboid object of dimensions 8 x 12 x 4 units

Constructing a cuboid object of dimensions 5 x 10 x 3 units

Surface area of cuboid A is 76 units squared

Volume of cuboid B is 384 units cubed

Length of the space diagonal of cuboid C is 11.5758 units

Destructing a cuboid object of dimensions 5 x 10 x 3 units

Destructing a cuboid object of dimensions 8 x 12 x 4 units

Destructing a cuboid object of dimensions 4 x 5 x 2 units

 

Process returned 0 (0x0)   execution time : 0.006 s

Press ENTER to continue.

*/

 

/*

        Copyright © Robin Broad 2018

        This program is free software: you can redistribute it and/or modify

        it under the terms of the GNU General Public License as published by

        the Free Software Foundation, either version 3 of the License, or

        (at your option) any later version.

 

        This program is distributed in the hope that it will be useful,

        but WITHOUT ANY WARRANTY; without even the implied warranty of

        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

        GNU General Public License for more details.

 

        GNU General Public License: https://www.gnu.org/licenses/gpl.html

*/