the constructors - lecture 6 sections 13.7 -...

28
The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether Hampden-Sydney College Fri, Jan 26, 2018 Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 1 / 28

Upload: others

Post on 18-Apr-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

The ConstructorsLecture 6

Sections 13.7 - 13.8

Robb T. Koether

Hampden-Sydney College

Fri, Jan 26, 2018

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 1 / 28

Page 2: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

1 The Four Fundamental Member Functions

2 The Default ConstructorThe Automatic Default Constructor

3 The Copy ConstructorThe Automatic Copy Constructor

4 Constructors and the new Operator

5 Assignment

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 2 / 28

Page 3: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Outline

1 The Four Fundamental Member Functions

2 The Default ConstructorThe Automatic Default Constructor

3 The Copy ConstructorThe Automatic Copy Constructor

4 Constructors and the new Operator

5 Assignment

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 3 / 28

Page 4: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

The Four Fundamental Member Functions

The four fundamental functionsThe default constructorThe copy constructorThe destructorThe assignment operator

These four member functions are essential to the functioning ofany class.In each case, if you fail to write your own version, the compiler willcreate the “automatic” version for you.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 4 / 28

Page 5: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Outline

1 The Four Fundamental Member Functions

2 The Default ConstructorThe Automatic Default Constructor

3 The Copy ConstructorThe Automatic Copy Constructor

4 Constructors and the new Operator

5 Assignment

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 5 / 28

Page 6: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

The Default Constructor

The Default ConstructorType::Type(); // PrototypeType Object; // Usage

The default constructor constructs an object for which no initialvalue is given.The default constructor should initialize the data members toneutral values that are appropriate for that type.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 6 / 28

Page 7: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Point Default Constructor

Example (Vectr Default Constructor)class Point{

Point() : m_x(0), m_y(0) {}

};

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 7 / 28

Page 8: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Point Default Constructor

Example (Vectr Default Constructor)Point pt;Point* ptr_pt = new Point[10];Point pt_arr[10] = {Point(1,2), Point(3,4)};

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 8 / 28

Page 9: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Vectr Default Constructor

Example (Vectr Default Constructor)class Vectr{

Vectr() : m_size(0), m_element(NULL) {}}

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 9 / 28

Page 10: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Purposes of the Default Constructor

The Default ConstructorVectr v;Vectr* ptr_v = new Vectr[10];Vectr v_arr[10] = {Vectr(4, 123), Vectr(8, 567)};

The default constructor is used whenAn object is created with no initial value specified.The new operator is used to create an array.A static array is partially initialized.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 10 / 28

Page 11: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Outline

1 The Four Fundamental Member Functions

2 The Default ConstructorThe Automatic Default Constructor

3 The Copy ConstructorThe Automatic Copy Constructor

4 Constructors and the new Operator

5 Assignment

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 11 / 28

Page 12: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

The Automatic Default Constructor

The automatic default constructor is provided automatically if wewrite no constructor.It

Allocates memory for the data members.Invokes each data member’s own default constructor.

However, if we write any constructor, then the automatic defaultconstructor is not provided.In that case, we must write the default constructor, if we want one.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 12 / 28

Page 13: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Outline

1 The Four Fundamental Member Functions

2 The Default ConstructorThe Automatic Default Constructor

3 The Copy ConstructorThe Automatic Copy Constructor

4 Constructors and the new Operator

5 Assignment

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 13 / 28

Page 14: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

The Copy Constructor

The Copy ConstructorType::Type(const Type&); // Prototype

Type Object2 = Object1; // Usage 1Type Object2(Object1); // Usage 2

The copy constructor constructs an object which will be a copy ofan existing object.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 14 / 28

Page 15: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Vectr Copy Constructor

Example (Vectr Copy Constructor)Point(const Point& pt){

m_x = pt.m_x;m_y = pt.m_y;

}

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 15 / 28

Page 16: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Vectr Copy Constructor

Example (Vectr Copy Constructor)Vectr(const Vectr& v){

m_size = v.m_size;

if (m_size == 0)m_element = NULL;

elsem_element = new double[m_size];

for (int i = 0; i < m_size; i++)m_element[i] = v.m_element[i];

return;}

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 16 / 28

Page 17: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Purposes of the Copy Constructor

The Copy ConstructorVectr f(Vectr v);int main(){

Vectr v;Vectr u = v;Vectr w(u);u = f(v);

...}

The copy constructor is used whenAn object is created and initialized to the value of an existing objectof the same type.A local copy of a value parameter is created during a function call.A function returns a value.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 17 / 28

Page 18: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Point of Style

The Copy ConstructorVectr u = v; // Good styleVectr u(v); // Good styleVectr u; // Poor...u = v; // ...styleVectr u = Vectr(3, 123); // Poor style

The first and second use the copy constructor.The third and fourth lines use the default constructor followed bythe assignment operator.The fifth uses another constructor followed by the copyconstructor.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 18 / 28

Page 19: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

makeCopy

Example (makeCopy)void makeCopy(const Vectr& v){

m_size = v.m_size;

if (m_size == 0)m_element = NULL;

elsem_element = new double[m_size];

for (int i = 0; i < m_size; i++)m_element[i] = v.m_element[i];

return;}

A handy technique is to write a function makeCopy() and simplycall on it to do the work of the copy constructor.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 19 / 28

Page 20: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Vectr Copy Constructor

Example (Vectr Copy Constructor)Vectr(const Vectr& v){

makeCopy(v);return;

}

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 20 / 28

Page 21: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Points of Style

The Copy ConstructorType::Type(const Type& obj){

makeCopy(obj);return;

}

void Type::makeCopy(const Type& obj){

// Make a copy}

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 21 / 28

Page 22: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Outline

1 The Four Fundamental Member Functions

2 The Default ConstructorThe Automatic Default Constructor

3 The Copy ConstructorThe Automatic Copy Constructor

4 Constructors and the new Operator

5 Assignment

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 22 / 28

Page 23: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

The Automatic Copy Constructor

The automatic copy constructorAllocates memory for the data members.Invokes each data member’s copy constructor to copy values fromthe existing object.

A memAB memBC memC

A memAB memBC memC

Object2 Object1

A(memA)

C(memC)

B(memB)

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 23 / 28

Page 24: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

The Automatic Copy Constructor

This is called a shallow copy because pointers (if any) are copiedwith no change in value.Therefore, the pointer in the new object will point to the very samememory as the pointer in the old object.Generally, this is not good. Instead, we want a deep copy.What would go wrong in the Vectr class if we made a shallowcopy of a vector?

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 24 / 28

Page 25: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Outline

1 The Four Fundamental Member Functions

2 The Default ConstructorThe Automatic Default Constructor

3 The Copy ConstructorThe Automatic Copy Constructor

4 Constructors and the new Operator

5 Assignment

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 25 / 28

Page 26: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Constructors and the new Operator

The new Operator and ConstructorsVectr* ptr;ptr = new Vectr;ptr = new Vectr(v);ptr = new Vectr(10);ptr = new Vectr(10, 123);ptr = new Vectr[10];

The new operator is designed to work in conjunction with theconstructors.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 26 / 28

Page 27: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Outline

1 The Four Fundamental Member Functions

2 The Default ConstructorThe Automatic Default Constructor

3 The Copy ConstructorThe Automatic Copy Constructor

4 Constructors and the new Operator

5 Assignment

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 27 / 28

Page 28: The Constructors - Lecture 6 Sections 13.7 - 13people.hsc.edu/faculty-staff/robbk/Coms262/Lectures/Spring 2018/L… · The Constructors Lecture 6 Sections 13.7 - 13.8 Robb T. Koether

Assignment

AssignmentRead Sections 13.7 - 13.8.

Robb T. Koether (Hampden-Sydney College) The Constructors Fri, Jan 26, 2018 28 / 28