constructors and destructors in c++ language.ppt

RahulGITAM 8 views 38 slides Sep 04, 2024
Slide 1
Slide 1 of 38
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38

About This Presentation

Constructors and destructors in c++


Slide Content

Constructors & Destructors
Controlling initialization & destruction

Operator Overloading
•Most operators in C++ can be overloaded
•Two ways:
•Member function of user defined class
•Non-member "stand alone" function
•Any operator overloading has to involve a
user-defined class object
•Has to be at least one operand that is not built-in
•Most operators are binary (i.e. the have a left and
a right-hand side), and the expression

Operator Overloading
•x op y can be defined either
• Stand-alone function call
•operatorop(x,y);
•Member-function call for x:
•x.operatorop(y);
•If define overloaded operator as member
function, it must be member function of
left-hand-side object

Interface & Implementation
•We want to limit access to data members
•Done with private keyword
•We want to separate interface from
implementation
•Constructors automatically called when new
object created
•Destructors automatically called when object
destroyed

Creation
•Objects are created in a few ways
•double x;
•Creates an object of type double
•C++ provides mechanism to control what
happens when user defined classes are
created in statement like above
•Constructor

Constructors
•Same name as class
•No return type (not even void!)
•Can be overloaded
•Same name, differ by arguments they take
•One with no arguments is “default” constructor

Example
class ToD
{
private:
int h, m;
bool PM;
public:
ToD(){
cout << "ToD object created!" << endl;
}
};
int main()
{
ToD x, y;
return 0;
}
What’s on the screen when the program runs?

Use?
(besides cheesy messages)
•Initialization
•Sometimes objects need to have values or
perform some operation before they can be
used

Isolating Implementation
•User can’t manipulate values
•User doesn’t need to do anything to
initialize
•User can’t put object in invalid state

Destructors
•Only one per class
•Class name with ~ in front
•Doesn’t take any arguments
•Controls what happens when object
destroyed
•Called automatically

Destructor Example
class Silly
{
private:
string name;
public:
Silly(){
cout <<"A silly object is born!"<< endl;
}
~Silly(){
cout <<"Silly object "<<name<<" dies!"<< endl;
}
};
int main()
{
Silly *p;
if (1>0){
Silly first;
first.name = “Tom";
p = new Silly[2];
p[0].name = "John";
p[1].name = “Sara";
}
Silly last;
last.name = “Tom Jr";
delete [] p;
return 0;
}

Use?
•When is destructor useful?
•Executed when object destroyed
•Can do anything, but interesting when
deallocate memory
•Want to delete items created using new to free up
memory

Destructor Example
List::~List() {
while(head != 0) {
Node *p = head;
head = head->next;
delete p;
}
}
/** DEFINITION OF CLASS NODE **/
class Node {
public:
int data;
Node *next;
Node(int val, Node* p) {
data = val;
next = p;
}
};

Calling Constructors
•Called three ways
1.Previously mentioned
•ex. Point p;
2.Using new Operator
•ex. Point *p = new Point(3.3,7.1);
3.As function that returns object
•Point(3.3,7.1).magnitude();
Class Point
{
public:
double x, y;
Point(double a, double b)
{
x = a;
y = b;
}
double magnitude() {
return sqrt(x*x + y*y);
}
};

Default Arguments
•In any function prototype, can follow name
of parameter with default value
Class Point
{
public:
double x, y;
Point(double a = 0, double b = 0)
{
x = a;
y = b;
}
};
Tags