CS 112 - Week 8 Lecture 2 - 2022-10-13
TODAY WE WILL
* announcements
* continuing with the "big-3",
destructor, copy constructor,
overloaded assignment operator
* prep for next class
* current reading:
Savitch - Chapter 11 - Section 11.4 - Classes
and Dynamic Arrays
====onward with the big 3!
* we ended last time with a Team class
that is *mostly* aiight, but will have some
issues (at least potential) due to not
having the "big 3" <-- the defaults don't
do all we would like;
* BUT! we never delete the players array we
allocated using new -- that's a memory leak!
(and a destructor method can help us take care of
this)
* BUT! with both the copy constructor and the
overloaded assignment, when the players array
is copied, JUST its address is copied,
so two objects end up "sharing" the same
players array <-- shallow copy! and we'd like
a deeper one
=====
let's start with a destructor method!
=====
* destructor cannot be overloaded,
and ALWAYS it is named as a tilde ~ followed by
the class name,
and it expects no arguments, and like a constructor
you do not specify a return type.
class Team's destructor would be named ~Team
and in Team.h its header should be:
~Team();
* it is called by the system when an object
of that class goes out of scope
* it SHOULD do any cleanup needed when that
happens! (For example: using delete for
any dynamic memory! BUT could also be things
like updated a static variable, I think)
=====
copy constructor
=====
* called by the system in situations where a copy
of an object is needed
* for example, when an argument needs to be
copied into a pass-by-value parameter
* also called automatically when a function
returns a value of the class type
* it is a constructor, its name must the class'
name
DesiredClass(const DesiredClass& a_desired_class);
its job is to set the data fields for a new instance
of the class such that they are an INDEPENDENT copy
of the argument object;
====
overloaded assignment operator
====
* you'll see it typically ends up having parts
very like those in the destructor and in
the copy constructor...!
(plus a dash of protection against self-assignment!)
* used when a statement tries to use =
to assign one object to another!
* SO: (source: ...caltech...cpp-ops.html <-- FILL IN)
0. check for self-assignment
1. deallocate any memory that the LHS object is
using
2. allocate needed memory to hold the copy of the
contents on the RHS
3. copy the values from RHS into the calling instance
4. return *this (return the object assigned to
the LHS
And here's the header syntax:
DesiredClass& operator=(const DesiredClass &rhs);