0% found this document useful (0 votes)
36 views44 pages

Constructors and Other Tools

Chapter 7 covers constructors, their definitions, and usage in object initialization, emphasizing their role in object-oriented programming. It also discusses additional tools such as const parameters, inline functions, static member data, and introduces vectors as dynamic arrays. Key points include the importance of default constructors, efficiency in parameter passing, and the functionality of static members and vectors.

Uploaded by

okuwobi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
36 views44 pages

Constructors and Other Tools

Chapter 7 covers constructors, their definitions, and usage in object initialization, emphasizing their role in object-oriented programming. It also discusses additional tools such as const parameters, inline functions, static member data, and introduces vectors as dynamic arrays. Key points include the importance of default constructors, efficiency in parameter passing, and the functionality of static members and vectors.

Uploaded by

okuwobi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 44

Chapter 7

Constructors and
Other Tools
Learning Objectives
 Constructors
 Definitions
 Calling

 More Tools
 const parameter modifier
 Inline functions
 Static member data

 Vectors
 Introduction to vector class

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-2


Constructors
 Initialization of objects
 Initialize some or all member variables
 Other actions possible as well

 A special kind of member function


 Automatically called when object declared

 Very useful tool


 Key principle of OOP

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-3


Constructor Definitions
 Constructors defined like any
member function
 Except:
1. Must have same name as class

2. Cannot return a value; not even void!

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-4


Constructor Definition Example
 Class definition with constructor:
 class DayOfYear
{
public:
DayOfYear(int monthValue, int dayValue);
//Constructor initializes month & day
void input();
void output();

private:
int month;
int day;
}

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-5


Constructor Notes
 Notice name of constructor: DayOfYear
 Same name as class itself!

 Constructor declaration has no return-type


 Not even void!

 Constructor in public section


 It’s called when objects are declared
 If private, could never declare objects!

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-6


Calling Constructors
 Declare objects:
DayOfYear date1(7, 4),
date2(5, 5);
 Objects are created here
 Constructor is called
 Values in parens passed as arguments
to constructor
 Member variables month, day initialized:
date1.month  7 date2.month  5
date1.dat  4 date2.day  5

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-7


Constructor Equivalency
 Consider:
 DayOfYear date1, date2
date1.DayOfYear(7, 4); // ILLEGAL!
date2.DayOfYear(5, 5); // ILLEGAL!
 Seemingly OK…
 CANNOT call constructors like other
member functions!

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-8


Constructor Code
 Constructor definition is like all other
member functions:
DayOfYear::DayOfYear(int monthValue, int dayValue)
{
month = monthValue;
day = dayValue;
}
 Note same name around ::
 Clearly identifies a constructor
 Note no return type
 Just as in class definition

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-9


Alternative Definition
 Previous definition equivalent to:

DayOfYear::DayOfYear( int monthValue,


int dayValue)
: month(monthValue), day(dayValue) 
{…}
 Third line called "Initialization Section"

 Body left empty

 Preferable definition version

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-10


Constructor Additional Purpose
 Not just initialize data

 Body doesn’t have to be empty


 In initializer version

 Validate the data!


 Ensure only appropriate data is assigned to
class private member variables
 Powerful OOP principle

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-11


Overloaded Constructors
 Can overload constructors just like
other functions
 Recall: a signature consists of:
 Name of function
 Parameter list

 Provide constructors for all possible


argument-lists
 Particularly "how many"

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-12


Class with Constructors Example:
Display 7.1 Class with Constructors (1 of 3)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-13


Class with Constructors Example:
Display 7.1 Class with Constructors (2 of 3)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-14


Class with Constructors Example:
Display 7.1 Class with Constructors (3 of 3)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-15


Constructor with No Arguments
 Can be confusing
 Standard functions with no arguments:
 Called with syntax: callMyFunction();
 Including empty parentheses

 Object declarations with no "initializers":


 DayOfYear date1; // This way!
 DayOfYear date(); // NO!
 What is this really?
 Compiler sees a function declaration/prototype!
 Yes! Look closely!

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-16


Explicit Constructor Calls
 Can also call constructor AGAIN
 After object declared
 Recall: constructor was automatically called then

 Can call via object’s name; standard member


function call
 Convenient method of setting
member variables
 Method quite different from standard
member function call

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-17


Explicit Constructor Call Example
 Such a call returns "anonymous object"
 Which can then be assigned
 In Action:
DayOfYear holiday(7, 4);
 Constructor called at object’s declaration
 Now to "re-initialize":
holiday = DayOfYear(5, 5);
 Explicit constructor call
 Returns new "anonymous object"
 Assigned back to current object

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-18


Default Constructor
 Defined as: constructor w/ no arguments
 One should always be defined
 Auto-Generated?
 Yes & No
 If no constructors AT ALL are defined  Yes
 If any constructors are defined  No

 If no default constructor:
 Cannot declare: MyClass myObject;
 With no initializers

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-19


Class Type Member Variables
 Class member variables can be any type
 Including objects of other classes!

 Type of class relationship


 Powerful OOP principle

 Need special notation for constructors


 So they can call "back" to member
object’s constructor

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-20


Class Member Variable Example:
Display 7.3 A Class Member Variable (1 of 5)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-21


Class Member Variable Example:
Display 7.3 A Class Member Variable (2 of 5)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-22


Class Member Variable Example:
Display 7.3 A Class Member Variable (3 of 5)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-23


Class Member Variable Example:
Display 7.3 A Class Member Variable (4 of 5)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-24


Class Member Variable Example:
Display 7.3 A Class Member Variable (5 of 5)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-25


Parameter Passing Methods
 Efficiency of parameter passing
 Call-by-value
 Requires copy be made  Overhead
 Call-by-reference
 Placeholder for actual argument
 Most efficient method
 Negligible difference for simple types
 For class types  clear advantage

 Call-by-reference desirable
 Especially for "large" data, like class types

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-26


The const Parameter Modifier
 Large data types (typically classes)
 Desirable to use pass-by-reference
 Even if function will not make modifications

 Protect argument
 Use constant parameter
 Also called constant call-by-reference parameter

 Place keyword const before type


 Makes parameter "read-only"
 Attempts to modify result in compiler error

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-27


Use of const
 All-or-nothing

 If no need for function modifications


 Protect parameter with const
 Protect ALL such parameters

 This includes class member function


parameters

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-28


Inline Functions
 For non-member functions:
 Use keyword inline in function declaration
and function heading
 For class member functions:
 Place implementation (code) for function IN
class definition  automatically inline
 Use for very short functions only

 Code actually inserted in place of call


 Eliminates overhead
 More efficient, but only when short!

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-29


Inline Member Functions
 Member function definitions
 Typically defined separately, in different file
 Can be defined IN class definition
 Makes function "in-line"

 Again: use for very short functions only

 More efficient
 If too long  actually less efficient!

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-30


Static Members
 Static member variables
 All objects of class "share" one copy
 One object changes it  all see change

 Useful for "tracking"


 How often a member function is called
 How many objects exist at given time

 Place keyword static before type

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-31


Static Functions
 Member functions can be static
 If no access to object data needed
 And still "must" be member of the class
 Make it a static function
 Can then be called outside class
 From non-class objects:
 E.g., Server::getTurn();
 As well as via class objects
 Standard method: myObject.getTurn();

 Can only use static data, functions!

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-32


Static Members Example:
Display 7.6 Static Members (1 of 4)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-33


Static Members Example:
Display 7.6 Static Members (2 of 4)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-34


Static Members Example:
Display 7.6 Static Members (3 of 4)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-35


Static Members Example:
Display 7.6 Static Members (4 of 4)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-36


Vectors
 Vector Introduction
 Recall: arrays are fixed size

 Vectors: "arrays that grow and shrink"


 During program execution

 Formed from Standard Template Library


(STL)
 Using template class

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-37


Vector Basics
 Similar to array:
 Has base type
 Stores collection of base type values

 Declared differently:
 Syntax: vector<Base_Type>
 Indicates template class
 Any type can be "plugged in" to Base_Type
 Produces "new" class for vectors with that type
 Example declaration:
vector<int> v;

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-38


Vector Use
 vector<int> v;
 "v is vector of type int"
 Calls class default constructor
 Empty vector object created

 Indexed like arrays for access


 But to add elements:
 Must call member function push_back

 Member function size()


 Returns current number of elements

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-39


Vector Example:
Display 7.7 Using a Vector (1 of 2)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-40


Vector Example:
Display 7.7 Using a Vector (2 of 2)

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-41


Vector Efficiency
 Member function capacity()
 Returns memory currently allocated
 Not same as size()
 Capacity typically > size
 Automatically increased as needed

 If efficiency critical:
 Can set behaviors manually
 v.reserve(32); //sets capacity to 32
 v.reserve(v.size()+10); //sets capacity to 10 more
than size

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-42


Summary 1
 Constructors: automatic initialization of
class data
 Called when objects are declared
 Constructor has same name as class

 Default constructor has no parameters


 Should always be defined

 Class member variables


 Can be objects of other classes
 Require initialization-section

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-43


Summary 2
 Constant call-by-reference parameters
 More efficient than call-by-value

 Can inline very short function definitions


 Can improve efficiency

 Static member variables


 Shared by all objects of a class

 Vector classes
 Like: "arrays that grow and shrink"

Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-44

You might also like