ݺߣ

ݺߣShare a Scribd company logo
CONSTRUCTORS
&
DESTRUCTORS
#109 Rimsha Nasrallah
#118 shamsa Nawaz
#139 Sana Khalid
Constructors
? C++ requires a construct call for each object it has created
? This ensure that object is initialized properly before it is used
? If there is no constructor, the compiler provides a default constructor that is, a
constructor with no parameters
? Name of constructor function is same as name of class
A counter example
? Data member
? Count
? Member function
? Constructor
? void inc_count()
? int get_count()
Automatic initialization
? An object of type Counter is first created, we want its count to be
initialized to 0
? Options are
? set_count() function (call it with an argument of 0)
? zero_count() function, to set count to 0.
? Such functions would need to be executed every time we created a
Counter object
Cont.
? A programmer may forget to initialize the object after creating it
? Its more reliable and convenient to cause each object to initialize implicitly when
it is created
? In the Counter class, the constructor Counter() is called automatically whenever a
new object of type Counter is created
? Counter c1, c2;
creates two objects. Constructor is called with each object separately
Constructor Name
? First, constructor name must be same as the name of class
? This is one way the compiler knows they are constructors
? Second, no return type is used for constructors
? Why not? Since the constructor is called automatically by the system, theres no
program for it to return anything to; a return value wouldnt make sense
? This is the second way the compiler knows they are constructors
Initializer List
? One of the most common tasks a constructor carries out is initializing data members
? In the Counter class the constructor must initialize the count member to 0
? The initialization takes place following the member function declarator but before the function body.
? Initialization in constructors function body
Counter()
{ count = 0; }
this is not the preferred approach
Cont.
? Its preceded by a colon.The value is placed in parentheses following the member
data.
Counter() : count(0)
{ }
? If multiple members must be initialized, theyre separated by commas.
? someClass() : m1(7), m2(33), m3(4) initializer list { }
Destructors
? Destructor is a function called implicitly when an object is destroyed
? The name of the destructor for a class is the tilde character (~) followed by the
class name
? No arguments and no return type for a destructor
? The most common use of destructors is to deallocate memory that was allocated
for the object by the constructor
Validating Data with set Functions
? A set function should validate the value before assigning to private data member
? Set function can return a value or may display a message if invalid data is assign to
object
Constructor with default arguments
Objects as Function Arguments
class Distance { //Distance class
private:
int feet;
float inches;
public:
Distance() : feet(0), inches(0.0)
{ }
Distance(int ft, float in) : feet(ft), inches(in)
{ }
void getdist(){
cout << nEnter feet: ; cin >> feet;
cout << Enter inches: ; cin >> inches;
}
void showdist(){
cout << feet << : << inches<<endl ;
}
void add_dist( Distance, Distance );
};
void Distance::add_dist(Distance d2,
Distance d3) {
inches = d2.inches + d3.inches;
feet = 0;
if(inches >= 12.0) {
inches -= 12.0;
feet++;
}
feet += d2.feet + d3.feet;
}
main()
{
Distance dist1, dist3;
Distance dist2(11, 6.5);
dist1.getdist();
dist3.add_dist(dist1, dist2);
cout << ndist1 = ; dist1.showdist();
cout << ndist2 = ; dist2.showdist();
cout << ndist3 = ; dist3.showdist();
}
feet
inches
dist1
0
0.0
`feet
inches
dist3
0
0.0
feet
inches
dist2
11
6.5
5
7.0
feet
inches
d1
feet
inches
d2
5
7.0
11
6.5
13.5
0
1.5
117
main()
{
Distance dist1, dist3;
Distance dist2(11, 6.5);
dist1.getdist();
dist3.add_dist(dist1, dist2);
cout << ndist1 = ; dist1.showdist();
cout << ndist2 = ; dist2.showdist();
cout << ndist3 = ; dist3.showdist();
}
void getdist(){
cout << nEnter feet: ; cin >> feet;
cout << Enter inches: ; cin >> inches;
}
void Distance::add_dist(Distance d1, Distance d2) {
inches = d1.inches + d2.inches;
feet = 0;
if(inches >= 12.0) {
inches -= 12.0;
feet++;
}
feet += d1.feet + d2.feet;
}
void showdist(){
cout << feet << : << inches<<endl ;
}
dist1 = 5 : 7.0
dist2 = 11 : 6.5
dist3 = 17 : 1.5
Overloaded Constructors
? Its convenient to be able to give variables of type Distance a
value when they are first created
Distance dist2(11, 6.25);
? which defines an object, and initializes it to a value of 11 for feet
and 6.25 for inches.
? Distance dist1, dist2; then No-argument constructor is
called/invoked (the default constructor)
? Since there are now two constructors with the same name,
Distance(), we say the constructor is overloaded
Member Functions Defined Outside the
Class
? Such functions, needs to have a prototype/declaration within the
class
? The function name, add_dist(), is preceded by the class name,
Distance, and a new symbolthe double colon (::).This symbol is
called the scope resolution operator.
? It is a way of specifying what class something is associated with
? In this situation, Distance::add_dist() means the add_dist() member
function of the Distance class
void Distance::add_dist(Distance d2, Distance d3)
Questions??

More Related Content

Oop presentation

  • 2. Constructors ? C++ requires a construct call for each object it has created ? This ensure that object is initialized properly before it is used ? If there is no constructor, the compiler provides a default constructor that is, a constructor with no parameters ? Name of constructor function is same as name of class
  • 3. A counter example ? Data member ? Count ? Member function ? Constructor ? void inc_count() ? int get_count()
  • 4. Automatic initialization ? An object of type Counter is first created, we want its count to be initialized to 0 ? Options are ? set_count() function (call it with an argument of 0) ? zero_count() function, to set count to 0. ? Such functions would need to be executed every time we created a Counter object
  • 5. Cont. ? A programmer may forget to initialize the object after creating it ? Its more reliable and convenient to cause each object to initialize implicitly when it is created ? In the Counter class, the constructor Counter() is called automatically whenever a new object of type Counter is created ? Counter c1, c2; creates two objects. Constructor is called with each object separately
  • 6. Constructor Name ? First, constructor name must be same as the name of class ? This is one way the compiler knows they are constructors ? Second, no return type is used for constructors ? Why not? Since the constructor is called automatically by the system, theres no program for it to return anything to; a return value wouldnt make sense ? This is the second way the compiler knows they are constructors
  • 7. Initializer List ? One of the most common tasks a constructor carries out is initializing data members ? In the Counter class the constructor must initialize the count member to 0 ? The initialization takes place following the member function declarator but before the function body. ? Initialization in constructors function body Counter() { count = 0; } this is not the preferred approach
  • 8. Cont. ? Its preceded by a colon.The value is placed in parentheses following the member data. Counter() : count(0) { } ? If multiple members must be initialized, theyre separated by commas. ? someClass() : m1(7), m2(33), m3(4) initializer list { }
  • 9. Destructors ? Destructor is a function called implicitly when an object is destroyed ? The name of the destructor for a class is the tilde character (~) followed by the class name ? No arguments and no return type for a destructor ? The most common use of destructors is to deallocate memory that was allocated for the object by the constructor
  • 10. Validating Data with set Functions ? A set function should validate the value before assigning to private data member ? Set function can return a value or may display a message if invalid data is assign to object
  • 12. Objects as Function Arguments class Distance { //Distance class private: int feet; float inches; public: Distance() : feet(0), inches(0.0) { } Distance(int ft, float in) : feet(ft), inches(in) { } void getdist(){ cout << nEnter feet: ; cin >> feet; cout << Enter inches: ; cin >> inches; } void showdist(){ cout << feet << : << inches<<endl ; } void add_dist( Distance, Distance ); }; void Distance::add_dist(Distance d2, Distance d3) { inches = d2.inches + d3.inches; feet = 0; if(inches >= 12.0) { inches -= 12.0; feet++; } feet += d2.feet + d3.feet; } main() { Distance dist1, dist3; Distance dist2(11, 6.5); dist1.getdist(); dist3.add_dist(dist1, dist2); cout << ndist1 = ; dist1.showdist(); cout << ndist2 = ; dist2.showdist(); cout << ndist3 = ; dist3.showdist(); }
  • 13. feet inches dist1 0 0.0 `feet inches dist3 0 0.0 feet inches dist2 11 6.5 5 7.0 feet inches d1 feet inches d2 5 7.0 11 6.5 13.5 0 1.5 117 main() { Distance dist1, dist3; Distance dist2(11, 6.5); dist1.getdist(); dist3.add_dist(dist1, dist2); cout << ndist1 = ; dist1.showdist(); cout << ndist2 = ; dist2.showdist(); cout << ndist3 = ; dist3.showdist(); } void getdist(){ cout << nEnter feet: ; cin >> feet; cout << Enter inches: ; cin >> inches; } void Distance::add_dist(Distance d1, Distance d2) { inches = d1.inches + d2.inches; feet = 0; if(inches >= 12.0) { inches -= 12.0; feet++; } feet += d1.feet + d2.feet; } void showdist(){ cout << feet << : << inches<<endl ; } dist1 = 5 : 7.0 dist2 = 11 : 6.5 dist3 = 17 : 1.5
  • 14. Overloaded Constructors ? Its convenient to be able to give variables of type Distance a value when they are first created Distance dist2(11, 6.25); ? which defines an object, and initializes it to a value of 11 for feet and 6.25 for inches. ? Distance dist1, dist2; then No-argument constructor is called/invoked (the default constructor) ? Since there are now two constructors with the same name, Distance(), we say the constructor is overloaded
  • 15. Member Functions Defined Outside the Class ? Such functions, needs to have a prototype/declaration within the class ? The function name, add_dist(), is preceded by the class name, Distance, and a new symbolthe double colon (::).This symbol is called the scope resolution operator. ? It is a way of specifying what class something is associated with ? In this situation, Distance::add_dist() means the add_dist() member function of the Distance class void Distance::add_dist(Distance d2, Distance d3)