Download presentation
Presentation is loading. Please wait.
1
Classes Copy Constructors
Department of Computer and Information Science, School of Science, IUPUI CSCI 240 Classes Copy Constructors Dale Roberts, Lecturer Computer Science, IUPUI
2
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
3
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 };
4
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);}
5
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.
6
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 };
7
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);}
8
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.
9
Copy Constructor - Example 3
// student.h /* A Simple Class to Represent a Student */ #define size 50 class Student{ private: char *name; char *id; char * ; public: Student(char *, char *, char *); Student(Student &); //Copy constructor ~Student(); };
10
Copy Constructor – Example 3 ….
// student.cpp #include “student.h” /* Member functions of the “Student" class */ Student ::Student(char *studentName, char *studentId, char *student ){ name = new char[size]; strcpy(name, studentName); id = new char[size]; strcpy(id, studentId); = new char[size]; strcpy( , student );} Student::~Student(){ delete [] name; delete [] id; delete [] ;} //Shallow copy constructor Student::Student (Student &s){ name = s.name; id = s.id; = s. ; }
11
Copy Constructor – Example 3 ….
// client.cpp #include “student.h” /* “csStudent" is an instance of “Student" */ main(){ Student csStudent1("Susie Creamchese“, " “, Student csStudent2 = csStudent1; } What happens when csStudent2 changes its name?
12
Copy Constructor - Example 4
// student.h /* A Simple Class to Represent a Student */ #define size 50 class Student{ private: char *name; char *id; char * ; public: Student(char *, char *, char *); ~Student(); Student(Student &); //Copy constructor };
13
Copy Constructor – Example 4 ….
// student.cpp #include “student.h” /* Member functions of the “Student" class */ Student::Student(char *studentName, char *studentId, char *student ){ name = new char[size]; strcpy(name, studentName); id = new char[size]; strcpy(id, studentId); = new char[size]; strcpy( , student );} Student::~Student(){ delete [] name; delete [] id; delete [] ;} // Deep copy constructor Student::Student(Student &s){ name = new char[size]; strcpy(name, s.name); id = new char[size]; strcpy(id, s.id); = new char[size]; strcpy( , s. );}
14
Copy Constructor – Example 4 ….
// client.cpp #include “student.h” main(){ Student csStudent1 (“Susie Creamchese”, “ ”, Student csStudent2 = csStudent1; } What happens when csStudent2 changes its name?
15
Acknowledgements These slides were originally prepared by Rajeev Raje, modified by Dale Roberts.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.