unit 9 - object oriented programming / c++

27
Class, Constructors And Destructors UNIT9 General Objective : To understand and apply the fundamental concept of class structure in C++ programming Specific Objective : At the end of the unit you should be able to :- State the basics of a program Recognize the class structure Differentiate between Constructors and Destructors. ____________________________________________________________ ____________ OBJECTIVES Class, Constructors And

Upload: syafiq-fauzi

Post on 12-Mar-2015

126 views

Category:

Documents


4 download

DESCRIPTION

Object Oriented Programming / C++

TRANSCRIPT

Page 1: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/1

UNIT9

General Objective : To understand and apply the fundamental

concept of class structure in

C++ programming

Specific Objective : At the end of the unit you should be able to :-

State the basics of a program

Recognize the class structure

Differentiate between Constructors and

Destructors.

Write and design a simple program

________________________________________________________________________

OBJECTIVES

Class, Constructors And Destructors

Page 2: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/2

9.0 Introduction To Class

A class is a programmer defined data typed. It is able to hold

data and methods (functions) that operate on data. Classes

form the basis for object-oriented programming (OOP).

A class is a collection of variables often of different types

combined with a set of related functions.

A class is a template where users are able to create objects,

which are simply instances of that class. A class encapsulates

(contain) both data structures, methods (functions) and these

are available to every object belonging to that class to be

executed repeatedly until a certain condition is reached.

Data or Variable is referred to as class attributes while the

term methods is used to refer to the class function.

Methods that contained within the class (or member methods)

can access its data.

Data and methods contained in a class are called their

member data and member methods.

________________________________________________________________________

INPUT

Class is combination of data declarations and functiondeclarations

Page 3: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/3

9.1 Class Declaration

A class declaration takes the general form of:

Figure 9 .1: An Example of A Class Declaration

To declare a class, use the class keyword followed by an

opening brace and then list the data members and methods of

that class. End the declaration with a closing brace and a

semicolon. Here is the declaration of a class called Cat:

________________________________________________________________________

Class class_name{private: // can be dropped

variable declarations;function declarations;

public:variable declarations;function declarations;

}

A class declaration is a new type that links code and

data. This new data is then used to declare objects of

the class. A class declaration is similar syntactically

to structure.

Page 4: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/4

class Cat

{

unsigned int itsAge;

unsigned int itsWeight;

Meow();

};

Figure 9.2: An Example Of A Class Definition

Declaring this class does not allocate memory for a Cat. It tells

the compiler what a Cat is, what data it contains (itsAge

and itsWeight) and what it can do (Meow( )). It also tells

the compiler how big a Cat is that is, how much room the

compiler must set aside for each Cat that you create. In this

example, if an integer is two bytes, a Cat is only four bytes

big: itsAge is two bytes, and itsWeight is another two

bytes. Meow( ) takes up no room because no storage space is

set aside for member functions (methods).

9.2 Defining an Object

You define an object of your new type just as you define an integer variable:

________________________________________________________________________

unsigned int GrossWeight; // define an unsigned integer

Cat Frisky; // define a Cat

Page 5: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/5

Figure 9.3: An Object Of A Class Definition

This code defines a variable called Gross Weight whose type

is an unsigned integer. It also defines Frisky, which is an

object whose class (or type) is Cat.

All items defined in class are private. That means they cannot

be accessed by any function which is not a member of the

class.

9.3 InLine function

The inline function is used to eliminate the overhead that

associated with the function call and return mechanism.

Therefore it can be executed much faster that generate the

function call and return takes time each time a function is

called.

Inline function is same as an ordinary function, except

for the use of the inline specifier.

Figure 9.4: An Example Of Inline Specifier

________________________________________________________________________

inline int cube(int n){ return n*n*n;}

Page 6: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/6

9.4 Data Encapsulation

A class binds its data and functions together. That means

its data (functions) can only be accessed by functions

from within that class. A class binds them into a cohesive

unit.

Encapsulation makes complex process easier by hiding

the complexity from the user.

9.5 Class Hierarchies

Class hierarchy is comprised of different levels of

inheritance among a group of related classes that work

together to provide solutions to programming problems.

When designing a class hierarchy, a class base must be

implemented. Based on figure as shown below, a base

class CBase and its derived class Cderived1. Now

imagine that class Cderived2 inherited from CDerived1.

________________________________________________________________________

Encapsulation is the bundling or packaging of data and functions into a single unit

Page 7: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/7

These classes form a simple hierarchy that is often

presented in a tree format.

Figure 9.5: A Class Hierarchy

9.6 Specifying Access Control

Access Specifier Meaning

public Class members are accessible by any

object

Private Class members are accessible only

by the class itself

Protected Class members are accessible by the

class itself and any classes derived

from the classes.

Figure 9.6: An Example of Specifying Access Control

________________________________________________________________________

Cbase

CDerived1

CDerived2

CDerived1 inherits from its parent class;CBASE

CDerived2 inherits from its parent class:Cderived1 and inherits CBase in the process

Page 8: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/8

9.7 Specifying Access Program

Figure 9.7: An Example of Specifying Public Access

In figure 9.7, the data member’s id and salary are private to

the class while the member functions assign_values and

display_values are public. That means id and salary can only

be accessed by assign_values and display_values.

Functions external to the class ( e.g main( ) )or functions from

another class cannot access these variables.

________________________________________________________________________

// Class DeclarationClass employee{ private:

int id;double salary;

public:void assign_values(const int, const double);void display_values();

};

// class implementationvoid employee:: assign_values(const int id2,const double

salary2){ id= id2;

salary = salary2;}void employee:: display_values(){ cout<<”\nEmployee id: “ <<id; cout<<”\nEmployee salary: “<<salary;}

Page 9: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/9

The function assign_values and display_values on the other hand

can be accessed by any function from within or outside the class.

This is because their scope is public.

9.8 Constructors

A constructor is called when an object is being created.

Constructors can be overloaded to allow different approaches

of object construction. There are several common types of

constructor, including default constructors, copy constructor

and default parameter constructors.

The rules for constructors are as follows:

1. Constructor has the same name as the class name.

2. It does not return a value.

3. It cannot pass arguments to a constructor.

________________________________________________________________________

A constructor is a special type of member function that is automatically called each time when an object is created

Page 10: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/10

Figure 9.8: An Example Of Constructor

In this example, the value of a is initialized by the

constructor myclass(). The constructor is called

when the object ob is created. An object is created when

that object’s declaration statement is executed.

________________________________________________________________________

#include <iostream>

class myclass{int a;public: myclass (); // constructor void show ();};

myclass:myclass(){ cout << “In constructor \n “; a = 10;}void myclass::show(){ cout << a;}

int main(){ myclass ob; ob.show(); return 0;

}

Page 11: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/11

9.8.1 Default Constructor

It does not require any arguments.

// Class DeclarationClass employee{ private:

int id;double salary;

public:employee();void assign_values(const int, const double);void display_values();

};

// constructor for employee objectemployee::employee(){cout << “\n Enter constructor”;id = 0;salary = 0.0cout << “|n Exit constructor”;}void employee:: assign_values(const int id2,const

double salary2)

{ id= id2;

salary = salary2;}

void employee:: display_values(){ cout<<”\nEmployee id: “ <<id; cout<<”\nEmployee salary: “<<salary;cout << endl;}

void main(){ employee emp; // constructor is called

emp.display_values(); values of variables after the call

________________________________________________________________________

Page 12: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/12

emp.assign_values(111,500.00); // the values are changedemp.display_values();cout<<endl;

}

Figure 9.9: An Example Of Default Constructor

In this program, the data members in an employee object

will be set by default.

That means any subsequent instantiation of the class

results in an object with the zero value the variables id and

salary.

These values can be changed with the assign_value

function.

9.8.2 Copy constructor

Is a constructor function designed to copy objects of the same

class type.

It accepts a single argument (a reference to the same class

type) and returns a copy of an object.

The copy constructor is called whenever code is passed on an

object to a function by value instead of reference.

The copy constructor is also called if initializing a new

object with another object of the same type for example:

CPoint3d pt1 (1.0f,2.0f,3.0f); // default constructor

CPoint3d pt2 new CPoint3d(pt1) // copy constructor

The copy constructor initializes the values from

existing object to a new object of having the same class type.

________________________________________________________________________

Page 13: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/13

To create a copy constructor for CPoint3d class,

the function in the class should be first declared.

CPoint3d(const CPoint3d& pt)

Here the CPoint3d constructor takes a constant reference to

an existing CPoint3d object. The goal of the copy

constructor is to make a copy of pt.

The const keyword is used to ensure that the copy constructor

does not alter the data of the object being passed into the

function.

Next, define the actual copy constructor in the class

definition:

CPoint3d :: CPoint3d(conts CPoint3d& pt)

{

this-> x = pt.x;

this-> y = pt.y;

this-> z = pt.z;

}

9.9 Destructors

c

The rule for destructors are as follows:

________________________________________________________________________

A destructor is a function (method) that is called automatically when an object is destroyed. The destructor reclaims the memory allocated to the object. It performs close-up operations

Page 14: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/14

a. A destructor has the same name as the class name but it

has a tilde(~) in front of it.

b. A destructor does not return a value.

c. Cannot pass any arguments to a destructor.

d. Cannot have more than one destructor for a class

9.9.1 The Destructor Function

The destructor receives no parameters so it can be

overloaded.

A class’s destructor name is comprised of a tilde (~)

followed by the name of the class as in ~CPOint3d().

The destructor for the CPoint3d class looks like this:

CPoint3d ::~CPoint3d()

{

}

There is no code in the destructor function body because

the CPoint3d class does not require any cleanup.

________________________________________________________________________

Do not hesitate to see your lecturer if you do not understand

Page 15: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/15

Test your comprehension before continuing the next input.Check your answers on the next page.

9.1 What is a class?

9.2 The inline function is used for _____________________.

9.3 Data Encapsulation is ________________________

9.4 Explain the difference between a constructor and destructor.

9.5 Identify the error of declaration shown below?

class Square{public: int Side;}

________________________________________________________________________

Activity 9

Page 16: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/16

9.6 Identify the error of the constructor shown in the following fragment? Class sample { double a,b,c; Public: double sample();// error ,why?};

Make sure you have tried to answer all the questions given.You can

check your answers with the answers below.

9.1 Collection of variables are often of different types combined

with a set of related functions.

9.2 To eliminate the overhead that is associated with the function

call and return mechanism.

9.3 A class binds its data and functions together. That means, their

data(functions) can only be accessed by functions from within

that class.

9.4 Constructors are called when an object is being created.

Constructors can be overloaded to allow different approaches

of object construction

Destructor is a function (method) that is called automatically

when an object is destroyed. The destructor reclaims the

________________________________________________________________________

Feedback 9

Page 17: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/17

memory allocated to the object. It performs close-up

operations.

9.5 No semicolon after close braces.

9.6 A constructor cannot have a return value.

________________________________________________________________________

Page 18: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/18

Class is combination of data declarations and function

declarations.

To declare a class, use the class keyword followed by an

opening brace and then lists the data members and methods

of that class. End the declaration with a closing brace and a

semicolon.

Encapsulation is the bundling or packaging of data and

functions into a single unit.

Class hierarchy is comprised of different levels of

inheritance among a group of related classes that work

together to provide solutions to programming problems.

A constructor is a special type of member function that is

automatically called each time when an object is created.

A destructor is a function (method) that is called

automatically when an object is destroyed. The destructor

reclaims the memory allocated to the object. It performs

close-up operations

________________________________________________________________________

Key Facts

Page 19: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/19

You are approaching success, please answer the questions below. If you

have any problems, please discuss it with your lecturer. Wish you good luck

and all the best.

Question 9 - 1

a. What is the difference between a declaration and a definition?

b. When will the copy constructor be called?

c. When will the destructor be called?

d. How does the copy constructor differ from the assignment operator

(=)?

e. Write a SimpleCircle class declaration (only) with one member

variable: itsRadius. Include a default constructor, a destructor, and

accessor methods for itsRadius.

f. Using the class you created in Question e, write the implementation of

the default constructor, initializing itsRadius with the value 5.

________________________________________________________________________

Self-Assessment

Page 20: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/20

Make sure you have tried to answer all the questions given. You can check

your answers with the answers below.

Answer 9 - 1

a. A definition sets aside memory, but a declaration does not. Almost all

declarations are definitions, but the major exceptions are class

declarations, function prototypes, and typedef are statements.

b. Whenever a temporary copy of an object is created. This happens

every time an object is passed by a value.

c. The destructor is called each time an object is destroyed, either

because it goes out of scope or because you call delete on a pointer

pointing to it.

d. The assignment operator acts on an existing object; the copy

constructor creates a new one.

________________________________________________________________________

Feedback On Self-Assessment

Page 21: Unit 9 - Object Oriented Programming / C++

Class, Constructors And Destructors F2010/9/21

e.

class SimpleCircle{public: SimpleCircle(); ~SimpleCircle(); void SetRadius(int); int GetRadius();private: int itsRadius;};

f.

SimpleCircle::SimpleCircle():itsRadius(5){}

________________________________________________________________________

CONGRATULATIONSMay success be with you….