C++/Class/Copy Constructor
A copy constructor to allow StringClass objects to be passed to functions.
<source lang="cpp">
- include <iostream>
- include <cstring>
- include <cstdlib>
using namespace std; class StringClass {
char *p;
public:
StringClass(char *s); // constructor StringClass(const StringClass &o); // copy constructor ~StringClass() { // destructor delete [] p; } char *get() { return p; }
};
StringClass::StringClass(char *s) // "Normal" constructor {
int l; l = strlen(s)+1; p = new char [l]; if(!p) { cout << "Allocation error\n"; exit(1); } strcpy(p, s);
}
StringClass::StringClass(const StringClass &o) // Copy constructor {
int l; l = strlen(o.p)+1; p = new char [l]; // allocate memory for new copy if(!p) { cout << "Allocation error\n"; exit(1); } strcpy(p, o.p); // copy string into copy
} void show(StringClass x) {
char *s; s = x.get(); cout << s << endl;
} int main() {
StringClass a("www.java2s.com"), b("www.java2s.com"); show(a); show(b); return 0;
}
</source>
copy constructor: X(X&)
<source lang="cpp">
- include <iostream>
using namespace std; class MyClass {
private: int data; public: MyClass(){ } MyClass(int d){ data = d; } MyClass(MyClass& a){ data = a.data; cout << "\nCopy constructor invoked"; } void display(){ cout << data; } void operator = (MyClass& a) { data = a.data; cout << "\nAssignment operator invoked"; }
}; int main(){
MyClass a1(37); MyClass a2; a2 = a1; cout << "\na2="; a2.display(); MyClass a3(a1); cout << "\na3="; a3.display(); return 0;
}
</source>
Demonstrating that class objects can be assigned to each other using default memberwise copy
<source lang="cpp">
- include <iostream>
using std::cout; using std::endl; class Date { public:
Date( int = 1, int = 1, int = 1990 ); // default constructor void print();
private:
int month; int day; int year;
}; // Simple Date constructor with no range checking Date::Date( int m, int d, int y ) {
month = m; day = d; year = y;
} // Print the Date in the form mm-dd-yyyy void Date::print() { cout << month << "-" << day << "-" << year; } int main() {
Date date1( 7, 4, 2009 ), date2; // d2 defaults to 1/1/90 cout << "date1 = "; date1.print(); cout << "\ndate2 = "; date2.print(); date2 = date1; // assignment by default memberwise copy cout << "\n\nAfter default memberwise copy, date2 = "; date2.print(); cout << endl; return 0;
}
</source>