C++ examples for Class:Constructor
Memory-saving String class, overloaded assignment and copy constructor
#include <iostream> #include <cstring> //for strcpy(), etc. using namespace std; class strCount //keep track of number { //of unique strings private:/* ww w . j ava 2 s. c om*/ int count; //number of instances char* str; //pointer to string friend class String; //make ourselves available //member functions are private strCount(char* s) //one-arg constructor { int length = strlen(s); //length of string argument str = new char[length+1]; //get memory for string strcpy(str, s); //copy argument to it count=1; } ~strCount() //destructor { delete[] str; } //delete the string }; class String //String class { private: strCount* psc; //pointer to strCount public: String() //no-arg constructor { psc = new strCount("NULL"); } String(char* s) //1-arg constructor { psc = new strCount(s); } String(String& S) //copy constructor { psc = S.psc; (psc->count)++; } ~String() //destructor { if(psc->count==1) //if we are its last user, delete psc; // delete our strCount else // otherwise, (psc->count)--; // decrement its count } void display() //display the String { cout << psc->str; //print string cout << " (addr=" << psc << ")"; //print address } void operator = (String& S) //assign the string { if(psc->count==1) //if we are its last user, delete psc; // delete our strCount else // otherwise, (psc->count)--; // decrement its count psc = S.psc; //use argument's strCount (psc->count)++; //increment its count } }; int main() { String s3 = "this is a test."; cout << "\ns3="; s3.display(); String s1; //define String s1 = s3; //assign it another String cout << "\ns1="; s1.display(); String s2(s3); //initialize with String cout << "\ns2="; s2.display(); cout << endl; return 0; }