Constructors and Destructors in C++

By: Daniel Malcolm  

There are two ways to define an integer variable. You can define the variable and then assign a value to it later in the program. For example,

int Weight;            // define a variable
...                    // other code here
Weight = 7;            // assign it a value

Or you can define the integer and immediately initialize it. For example,

int Weight = 7;        // define and initialize to 7

Initialization combines the definition of the variable with its initial assignment. Nothing stops you from changing that value later. Initialization ensures that your variable is never without a meaningful value.

How do you initialize the member data of a class? Classes have a special member function called a constructor. The constructor can take parameters as needed, but it cannot have a return value--not even void. The constructor is a class method with the same name as the class itself.

Whenever you declare a constructor, you'll also want to declare a destructor. Just as constructors create and initialize objects of your class, destructors clean up after your object and free any memory you might have allocated. A destructor always has the name of the class, preceded by a tilde (~). Destructors take no arguments and have no return value. Therefore, the Cat declaration includes


Default Constructors and Destructors

If you don't declare a constructor or a destructor, the compiler makes one for you. The default constructor and destructor take no arguments and do nothing.

What good is a constructor that does nothing? In part, it is a matter of form. All objects must be constructed and destructed, and these do-nothing functions are called at the right time. However, to declare an object without passing in parameters, such as

Cat Rags;           // Rags gets no parameters

you must have a constructor in the form


When you define an object of a class, the constructor is called. If the Cat constructor took two parameters, you might define a Cat object by writing

Cat Frisky (5,7);

If the constructor took one parameter, you would write

Cat Frisky (3);

In the event that the constructor takes no parameters at all, you leave off the parentheses and write

Cat Frisky ;

This is an exception to the rule that states all functions require parentheses, even if they take no parameters. This is why you are able to write

Cat Frisky;

which is a call to the default constructor. It provides no parameters, and it leaves off the parentheses. You don't have to use the compiler-provided default constructor. You are always free to write your own constructor with no parameters. Even constructors with no parameters can have a function body in which they initialize their objects or do other work.

As a matter of form, if you declare a constructor, be sure to declare a destructor, even if your destructor does nothing. Although it is true that the default destructor would work correctly, it doesn't hurt to declare your own. It makes your code clearer.

Program below rewrites the Cat class to use a constructor to initialize the Cat object, setting its age to whatever initial age you provide, and it demonstrates where the destructor is called.

Using constructors and destructors.

1:   // Demonstrates declaration of a constructors and
2:   // destructor for the Cat class
4:   #include <iostream.h>      // for cout
6:   class Cat                   // begin declaration of the class
7:   {
8:    public:                    // begin public section
9:      Cat(int initialAge);     // constructor
10:     ~Cat();                  // destructor
11:     int GetAge();            // accessor function
12:     void SetAge(int age);    // accessor function
13:     void Meow();
14:   private:                   // begin private section
15:     int itsAge;              // member variable
16:  };
18:  // constructor of Cat,
19:  Cat::Cat(int initialAge)
20:  {
21:     itsAge = initialAge;
22:  }
24:  Cat::~Cat()                 // destructor, takes no action
25:  {
26:  }
28:  // GetAge, Public accessor function
29:  // returns value of itsAge member
30:  int Cat::GetAge()
31:  {
32:     return itsAge;
33:  }
35:  // Definition of SetAge, public
36:  // accessor function
38:  void Cat::SetAge(int age)
39:  {
40:     // set member variable its age to
41:     // value passed in by parameter age
42:     itsAge = age;
43:  }
45:  // definition of Meow method
46:  // returns: void
47:  // parameters: None
48:  // action: Prints "meow" to screen
49:  void Cat::Meow()
50:  {
51:     cout << "Meow.\n";
52:  }
54:  // create a cat, set its age, have it
55   // meow, tell us its age, then meow again.
56:  int main()
57:  {
58:    Cat Frisky(5);
59:    Frisky.Meow();
60:    cout << "Frisky is a cat who is " ;
61:    cout << Frisky.GetAge() << " years old.\n";
62:    Frisky.Meow();
63:    Frisky.SetAge(7);
64:    cout << "Now Frisky is " ;
65:    cout << Frisky.GetAge() << " years old.\n";
66;     return 0;
67: }

Output: Meow.
Frisky is a cat who is 5 years old.
Now Frisky is 7 years old.

Analysis: The above program adds a constructor that takes an integer. Line 10 declares the destructor, which takes no parameters. Destructors never take parameters, and neither constructors nor destructors return a value--not even void.
Lines 19-22 show the implementation of the constructor. It is similar to the implementation of the SetAge() accessor function. There is no return value.

Lines 24-26 show the implementation of the destructor ~Cat(). This function does nothing, but you must include the definition of the function if you declare it in the class declaration.

Line 58 contains the definition of a Cat object, Frisky. The value 5 is passed in to Frisky's constructor. There is no need to call SetAge(), because Frisky was created with the value 5 in its member variable itsAge, as shown in line 61. In line 63, Frisky's itsAge variable is reassigned to 7. Line 65 prints the new value.


DO use constructors to initialize your objects. DON'T give constructors or destructors a return value. DON'T give destructors parameters.

Archived Comments

1. Angelfnag
View Tutorial          By: Angelfnag at 2017-03-18 18:26:57

2. eugeniemcinturfsid
View Tutorial          By: dodiecasanovan3j at 2017-02-25 04:38:13

3. meow is simple and awesome
View Tutorial          By: vishnu prasanth at 2013-01-10 10:00:35

4. Yap, it's well but u used parametrized constructor..... so u didn't mention that..
View Tutorial          By: mrinal at 2012-02-03 17:39:28

5. oh u solved my one of the hardest problem through this program and its awsum explanation iam very th
View Tutorial          By: zehra at 2012-01-28 19:44:14

6. thank u for all these ,seeeing one example is not enough to understand,so my kindly request is to pr
View Tutorial          By: rakesh kumar at 2011-09-29 07:31:10

7. thank u its a clear information .i got the solutions for my doubts.once again thank you daer
View Tutorial          By: anand at 2011-06-29 09:30:12

8. Good work. Although it would be nicer if you can possibly increase the number of exemplary programs
View Tutorial          By: frisked09 at 2011-05-26 23:52:34

9. good defining of constructor and destructor.
View Tutorial          By: Deeraj Singh at 2011-05-03 22:12:48

10. the default construrctor does not give the defalut value when we execute a program ???give me the tr
View Tutorial          By: muhammad abdullah at 2011-04-11 13:16:20

11. gr8 work :)
View Tutorial          By: ahmad at 2011-03-23 01:05:57

12. it's the nice work
View Tutorial          By: yogesh kumar at 2011-03-08 22:35:51

13. it's the nice w
View Tutorial          By: yogesh kumar at 2011-03-08 22:34:13

14. nice example's
View Tutorial          By: karthi at 2011-01-30 02:25:36

15. sufficient result
View Tutorial          By: naush at 2010-11-24 23:45:18

16. i am what i am and that you should never be. mJ
View Tutorial          By: mohit at 2010-08-27 06:17:04

17. its nice.. thank you so much.........
View Tutorial          By: rozen at 2010-04-14 11:21:07

View Tutorial          By: KUSUM at 2010-02-02 23:48:50

19. You are good work ,an axplane is so gread
thanks friends

View Tutorial          By: chetan at 2009-06-08 11:58:51

20. All in all is not a a question How 2 use contstuctor and distructors.can you write for me
View Tutorial          By: Tkalani at 2009-06-03 02:18:04

21. All in all is not a a question How 2 use contstuctor and distructors.can you write for me
View Tutorial          By: Tkalani at 2009-06-03 02:16:14

22. It is working. Thank u dear!!!
View Tutorial          By: Ashwani Rana at 2009-04-02 03:56:17

23. Nice explaination of constructor and destructor. But also give diffrenc between costructor and destr
View Tutorial          By: Anon at 2009-03-01 03:50:06

24. you're so great!
View Tutorial          By: renz at 2008-08-10 18:29:59

Most Viewed Articles (in C++ )

Latest Articles (in C++)

Comment on this tutorial