150 likes | 335 Views
Department of Computer and Information Science, School of Science, IUPUI. Classes Copy Constructors. CSCI 240. Dale Roberts, Lecturer Computer Science, IUPUI E-mail: droberts@cs.iupui.edu. Copy Constructor. Constructor with a Reference to THAT CLASS as an ARGUMENT X(X &) Format
E N D
Department of Computer and Information Science,School of Science, IUPUI ClassesCopy Constructors CSCI 240 Dale Roberts, Lecturer Computer Science, IUPUI E-mail: droberts@cs.iupui.edu
Copy Constructor • Constructor with a Reference to THAT CLASS as an ARGUMENT • X(X &) Format • Initialization of a New Object by Another Object of that Class • An Object is Passed by Value to a Function • An Object is Returned from a Function • Shallow and Deep Copying -- Involvement of Pointers • Implicit Copy Constructor is Created by the Compiler to Perform Member-wise Initialization
Copy Constructor – Example 1 • // date.h#define size 50 class date{ private: int day, month, year; char *string_date; public: date(char *ip_date); //Constructor date(const date &ip_date); // Copy Constructor ~date(); //Destructor void print_date(); //Member Function };
Copy Constructor – Example 1 …. • // date.cpp#include “date.h”Date::date() //default constructor {day = 0; month = 0; year = 0; string_date = 0;}date::date(char *ip_date){ //Constructor day = 0; month = 0; year = 0; string_date = new char [size]; strcpy(string_date, ip_date);} //Shallow Copy Constructor date(const date &ip_date) {string_date = ip_date.string_date;}//Destructor date::~date() {delete[] (string_date);}
Copy Constructor – Example 1 …. • // client.cpp#include “date.h”main() { date today("June 21, 1995"); //Use of shallow copy constructor date extra_day = today;} • “Shallow copy” simply means that all the data member values are copied.
Copy Constructor – Example 2 • // date.h#define size 50 class date{ private: int day, month, year; char *string_date; public: date(char *ip_date); //Constructor date(const date &ip_date); // Copy Constructor ~date(); //Destructor void print_date(); //Member Function };
Copy Constructor – Example 2 …. • // date.cpp#include “date.h”Date::date() //default constructor {day = 0; month = 0; year = 0; string_date = 0;}date::date(char *ip_date){ //Constructor day = 0; month = 0; year = 0; string_date = new char [size]; strcpy(string_date, ip_date);}//Deep Copy Constructor date(const date &ip_date) { string_date = new char[size]; strcpy(string_date, ip_date.string_date);} //Destructor date::~date() {delete[] (string_date);}
Copy Constructor – Example 2 …. • // client.cpp#include “date.h”main() { date today("June 21, 1995"); //Deep copy constructor date extra_day = today; } • “Deep copy” means that objects pointed to by data members are also copied. Deep copying may be required whenever you have data members that are pointers.
Copy Constructor - Example 3 • // student.h/* A Simple Class to Represent a Student */#define size 50class Student{ private: char *name; char *id; char *email; public: Student(char *, char *, char *); Student(Student &); //Copy constructor ~Student();};
Copy Constructor – Example 3 …. • // student.cpp#include “student.h”/* Member functions of the “Student" class */Student ::Student(char *studentName, char *studentId, char *studentEmail){ name = new char[size]; strcpy(name, studentName); id = new char[size]; strcpy(id, studentId); email = new char[size]; strcpy(email, studentEmail);}Student::~Student(){ delete [] name; delete [] id; delete [] email;}//Shallow copy constructorStudent::Student (Student &s){ name = s.name; id = s.id; email = s.email;}
Copy Constructor – Example 3 …. • // client.cpp#include “student.h”/* “csStudent" is an instance of “Student" */main(){ Student csStudent1("Susie Creamchese“, "123456789“, "screamch@iupui.edu"); Student csStudent2 = csStudent1;} What happens when csStudent2 changes its name?
Copy Constructor - Example 4 • // student.h/* A Simple Class to Represent a Student */#define size 50class Student{ private: char *name; char *id; char *email; public: Student(char *, char *, char *); ~Student(); Student(Student &); //Copy constructor};
Copy Constructor – Example 4 …. • // student.cpp#include “student.h”/* Member functions of the “Student" class */Student::Student(char *studentName, char *studentId, char *studentEmail){ name = new char[size]; strcpy(name, studentName); id = new char[size]; strcpy(id, studentId); email = new char[size]; strcpy(email, studentEmail);}Student::~Student(){ delete [] name; delete [] id; delete [] email;}// Deep copy constructorStudent::Student(Student &s){ name = new char[size]; strcpy(name, s.name); id = new char[size]; strcpy(id, s.id); email = new char[size]; strcpy(email, s.email);}
Copy Constructor – Example 4 …. • // client.cpp#include “student.h”main(){ Student csStudent1 (“Susie Creamchese”, “123456789”, “screamch@iupui.edu”); Student csStudent2 = csStudent1;} What happens when csStudent2 changes its name?
Acknowledgements • These slides were originally prepared by Rajeev Raje, modified by Dale Roberts.