I am trying to overloading a string class.In the code shown below I am expecting only overloaded Assignment operator to be invoked but overloaded copy constructor is also invoked. Can anybody please suggest if there is a mistake in my code or my understanding is different?
#include<iostream>
using namespace std;
class String_Overload{
char *s_ptr;
public:
String_Overload()
{
s_ptr = new char(1);
s_ptr[0]='\0';
cout<<"In no param constructor"<<"\n";
}
String_Overload(const char* s_ptr_cpy)
{
int len=0;
while(s_ptr_cpy[len]!=NULL)
{++len;}
s_ptr = new char(len+1);
for(int i=0;i<len;i++)
{
s_ptr[i]=s_ptr_cpy[i];
}
s_ptr[len+1]='\0';
cout<<"In overloaded constructor"<<"\n";
}
String_Overload(const String_Overload& s_ptr_cpy)
{
int len=0;
while(s_ptr_cpy.s_ptr[len]!=NULL)
{++len;}
s_ptr = new char(len+1);
for(int i=0;i<len;i++)
{
s_ptr[i]=s_ptr_cpy.s_ptr[i];
}
s_ptr[len+1]='\0';
cout<<"In copy constructor"<<"\n";
}
String_Overload operator=(String_Overload& s_ptr_cpy)
{
int len=0;
while(s_ptr_cpy.s_ptr[len]!=NULL){++len;}
for(int i=0;i<len;i++)
{
s_ptr[i]=s_ptr_cpy.s_ptr[i];
}
s_ptr[len+1]='\0';
cout<<"In assignment constructor\n";
return *this;
}
void display(){cout<<s_ptr<<"\n";}
~String_Overload(){delete []s_ptr;}
};
int main()
{
char temp[]="Hello World";
String_Overload s1{temp};
String_Overload s4;
s4=s1;
s4.display();
return 0;
}
Output:
In overloaded constructor
In no param constructor
In assignment constructor
In copy constructor
Hello World