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
~Cat();
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
Cat();
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 3: 4: #include <iostream.h> // for cout 5: 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: }; 17: 18: // constructor of Cat, 19: Cat::Cat(int initialAge) 20: { 21: itsAge = initialAge; 22: } 23: 24: Cat::~Cat() // destructor, takes no action 25: { 26: } 27: 28: // GetAge, Public accessor function 29: // returns value of itsAge member 30: int Cat::GetAge() 31: { 32: return itsAge; 33: } 34: 35: // Definition of SetAge, public 36: // accessor function 37: 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: } 44: 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: } 53: 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. Meow. 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
18. DOWNLOAD IT
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 comment.bt 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 comment.bt 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
Comment on this tutorial
- Data Science
- Android
- AJAX
- ASP.net
- C
- C++
- C#
- Cocoa
- Cloud Computing
- HTML5
- Java
- Javascript
- JSF
- JSP
- J2ME
- Java Beans
- EJB
- JDBC
- Linux
- Mac OS X
- iPhone
- MySQL
- Office 365
- Perl
- PHP
- Python
- Ruby
- VB.net
- Hibernate
- Struts
- SAP
- Trends
- Tech Reviews
- WebServices
- XML
- Certification
- Interview
categories
Related Tutorials
Calculating total based on the given quantity and price in C++
Sorting an array of Strings in C++
Matrix using nested for loops in C++
Compute the square root of the sum of the squares of an array in C++
Calculate average using Two-Dimensional Array in C++
Two-Dimensional Array Manipulation in C++
Compiling and Linking Multiple Source Files in C++
Escape Sequences for Nonprintable Characters in C++
Using the Built-in Arithmetic Types in C++