CSC241: Object Oriented Programming: Lecture No 03
CSC241: Object Oriented Programming: Lecture No 03
Lecture No 03
1
Previous Lecture
• Simple C++ program using cin and cout
• Member function with parameters
– GradeBook class
– Book class
– Distance class
• Set functions and get functions
• A little about Constructor
2
Today’s Lecture
• Constructor – example program
• Placing class in separate file
• Destructor – example program
• Constructor with arguments – example
program
3
Example program – Distance class
• Data members
– Feet
– Inches
• Member functions
– void setdist(int ft, float in);
– void getdist();
– void initialize();
– void showdist();
Go to program
4
Distance class – data member initialization
• Distance class shows two ways to initialize the data
items in an object
– void initialize();
– void setdist(int ft, float in);
• Can an object be initialized whenever it is created,
without requiring a separate call to a member function?
• Automatic initialization is carried out using a special
member function called a constructor.
• A constructor is a member function that is executed
automatically whenever an object is created.
5
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
6
A counter example
• Data member
– Count
• Member function
– Constructor
– void inc_count()
– int get_count()
7
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
8
Cont.
• A programmer may forget to initialize the object
after creating it
• It’s 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
Go to program
9
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, there’s no program for it to return
anything to; a return value wouldn’t make sense
– This is the second way the compiler knows they are
constructors
10
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 constructor’s function body
Counter()
{ count = 0; }
this is not the preferred approach
11
Cont.
• It’s preceded by a colon. The value is placed in
parentheses following the member data.
Counter() : count(0)
{ }
• If multiple members must be initialized,
they’re separated by commas.
– someClass() : m1(7), m2(33), m2(4) ←initializer list
{ }
12
Placing a Class in a Separate File
• Header file (.h)
– Contain definition of class
– Not an executable file
– Included in .cpp file
• main () file (.cpp)
– Include .h file containing class definition
– Executable file
Go to program
13
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
Write a CreatAndDistroy class
14
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
Go to program
15
Constructor with default arguments
Go to program
16
Objects as Function Arguments
class Distance { //Distance class void Distance::add_dist(Distance d2,
private: Distance d3) {
int feet; inches = d2.inches + d3.inches;
feet = 0;
float inches;
if(inches >= 12.0) {
public:
inches -= 12.0;
Distance() : feet(0), inches(0.0) feet++;
{} }
Distance(int ft, float in) : feet(ft), feet += d2.feet + d3.feet;
inches(in) }
{}
void getdist(){ main()
cout << “\nEnter feet: “; cin >> feet; {
Distance dist1, dist3;
cout << “Enter inches: “; cin >> inches;
Distance dist2(11, 6.5);
} dist1.getdist();
void showdist(){ dist3.add_dist(dist1, dist2);
cout << feet << “:” << inches<<endl ; cout << “\ndist1 = “; dist1.showdist();
} cout << “\ndist2 = “; dist2.showdist();
void add_dist( Distance, Distance ); cout << “\ndist3 = “; dist3.showdist();
}; } 17
18
Cont.
main()
{
dist1 dist3
Distance dist1, dist3; feet 5
0 feet 17
1
0
Distance dist2(11, 6.5); inches 7.0
0.0 inches 13.5
0.0
1.5
dist1.getdist();
dist3.add_dist(dist1, dist2);
cout << “\ndist1 = “; dist1.showdist(); dist2
cout << “\ndist2 = “; dist2.showdist(); feet 11
cout << “\ndist3 = “; dist3.showdist(); inches 6.5
}
voidvoid
Distance::add_dist(Distance
showdist(){
getdist(){ d1,
Distance d2) { d1 d2
cout << “\nEnter feet: “; cin >> feet; ;
cout << feet << “:” << inches<<endl
5
inches
} cout=<<
d1.inches + d2.inches; feet
“Enter inches: “; cin >> inches; feet 11
feet = 0;
}
if(inches >= 12.0) {
inches 7.0 inches 6.5
dist1inches
= 5 :-=7.0
12.0;
feet++;
dist2
}
= 11 : 6.5
feet +==d1.feet
dist3 17 : +1.5
d2.feet; Go to program
} 19
Overloaded Constructors
• It’s 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
20
Member Functions Defined Outside the Class
22
Classes, Objects, and Memory
23
24