|
|
Copy Constructor http://ecomputernotes.com
Example class Person{ char * name; public: Person(char * = NULL); const char * GetName() const; ~Person(); }; http://ecomputernotes.com
Example class Student: public Person{ char* major; public: Student(char *, char *); void Print() const; ~Student(); }; http://ecomputernotes.com
Example Student::Student(char *_name, char *_maj) : Person(_name), major(NULL) { if (_maj != NULL) { major = new char [strlen(_maj)+1]; strcpy(major,_maj); } } http://ecomputernotes.com
Example void Student::Print() const{ cout << “Name: ”<< GetName() <<endl; cout << “Major: “ << major << endl; } http://ecomputernotes.com
Example int main(){ Student sobj1(“Smith”, “Computer Science”); { Student sobj2 = sobj1; // Student sobj2(sobj1); sobj2.Print(); } return 0; } http://ecomputernotes.com
Example The output is as follows: Name: Smith Major: Computer Science http://ecomputernotes.com
Copy Constructor Compiler generates copy constructor for base and derived classes, if needed Derived class Copy constructor is invoked which in turn calls the Copy constructor of the base class The base part is copied first and then the derived part http://ecomputernotes.com
Shallow Copy
Example Person::Person(const Person& rhs){ // Code for deep copy } int main(){ Student sobj1(“Smith”, “Computer Science”); Student sobj2 = sobj1; sobj2.Print(); return 0; } http://ecomputernotes.com
Example The output is as follows: Name: Smith Major: Computer Science http://ecomputernotes.com
Copy Constructor Compiler generates copy constructor for derived class, calls the copy constructor of the base class and then performs the shallow copy of the derived class’s data members http://ecomputernotes.com
Shallow Copy
Example Person::Person(const Person& rhs) { // Code for deep copy } Student::Student (const Student& rhs) { // Code for deep copy } http://ecomputernotes.com
Example int main(){ Student sobj1(“Smith”, “Computer Science”); Student sobj2 = sobj1; sobj2.Print(); return 0; } http://ecomputernotes.com
Copy Constructor The output will be as follows: Name: Major: Computer Science Name of sobj2 was not copied from sobj1 http://ecomputernotes.com
Copy
Modified Default Constructor Person::Person(char * aName){ if(aName == NULL) cout << “Person Constructor”; ... } int main(){ Student s (“Smith”,“Computer Science”); … } http://ecomputernotes.com
Copy Constructor The output of previous code will be as follows: Person Constructor Name: Major: Computer Science http://ecomputernotes.com
Copy Constructor Programmer must explicitly call the base class copy constructor from the copy constructor of derived class http://ecomputernotes.com
Example Person::Person(const Person& prhs) { // Code for deep copy } Student::Student(const Student &srhs) :Person(srhs) { // Code for deep copy } http://ecomputernotes.com
Example main function shown previously will give following output Name: Smith Major: Computer Science http://ecomputernotes.com
Copy
Copy Constructors Person::Person(const Person &rhs) : name(NULL) { //code for deep copy } Student::Student(const Student & rhs) : major(NULL), Person(rhs){ //code for deep copy } 3 4 5 1 6 2 7 http://ecomputernotes.com
Example int main() { Student sobj1, sboj2(“Smith”, “CS”); sobj1 = sobj2; return 0; } http://ecomputernotes.com
Assignment Operator Compiler generates copy assignment operator for base and derived classes, if needed Derived class copy assignment operator is invoked which in turn calls the assignment operator of the base class The base part is assigned first and then the derived part
Assignment Operator Programmer has to call operator of base class, if he is writing assignment operator of derived class http://ecomputernotes.com
Example class Person{ public: Person & operator = (const Person & rhs){ cout << “Person Assignment”; // Code for deep copy assignment } }; http://ecomputernotes.com
Example class Student: Public Person{ public: Student & operator = (const Student & rhs){ cout<< “Student Assignment”; // Code for deep copy assignment } }; http://ecomputernotes.com
Example int main() { Student sobj1, sboj2(“Smith”, “CS”); sobj1 = sobj2; return 0; } http://ecomputernotes.com
Example The assignment operator of base class is not called Output Student Assignment http://ecomputernotes.com
Assignment Operator There are two ways of writing assignment operator in derived class Calling assignment operator of base class explicitly Calling assignment operator of base class implicitly http://ecomputernotes.com
Calling Base Class Member Function Base class functions can be explicitly called with reference to base class itself //const char* Person::GetName() {...}; void Student::Print() { cout << GetName(); cout << Person::GetName(); } http://ecomputernotes.com
Explicitly Calling operator = Person & Person::operator = (const Person & prhs); Student & Student ::operator = (const Student & srhs){ Person::operator = (srhs); … return *this; } http://ecomputernotes.com
Implicitly Calling operator = Student & Student ::operator = (const Student & srhs) { static_cast<Person &>*this=srhs; // Person(*this) = srhs; // (Person)*this = srhs; … } http://ecomputernotes.com
Summary: http://ecomputernotes.com - Computer Notes - Copy Constructor in Object oriented Programming what is Copy Constructor Explain about it in detail .explain it with example
| URL: |
No comments posted yet
Comments