a string class problem

Following code gave wrong output, can you explain why. Any comments for the "correct" part of the code also wellcome :-)

#include <iostream.h>
#include <string.h>

class Mystring
{
private:
char *pstring;
int length;
public:
Mystring()
{  length = 0;
   pstring = NULL;
}
Mystring(char *pchar)
{  if (pstring!=NULL) delete pstring;
   length = strlen(pchar);
   pstring = new char[length + 1];
   strcpy(pstring, pchar);
}
Mystring(Mystring &mystring1)
{  if (pstring!=NULL) delete pstring;
   length = mystring1.length;
   pstring = new char [length + 1];
   strcpy (pstring, mystring1.pstring);
}
~Mystring()
{  delete pstring;
}
int Len (void)
{  return length;
}
void Show (void)
{  cout<<pstring<<endl;
}
};

int main ()
{  Mystring Mystring1;
   Mystring Mystring2("a string");
   Mystring Mystring3(Mystring2);     //Remove these 2 lines  
   Mystring2.Show(); Mystring3.Show();//the output become OK    
   Mystring1="another string";
   Mystring1.Show();
   return 0;
}

Without operator overloading, Do you think Mystring1="another string" is OK?
learnAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
q2guoConnect With a Mentor Commented:
I don't see anything wrong except you should make the
following changes

~Mystring()
{
      if (pstring !=NULL) delete pstring;
}  

also, you should move your implementation of the member functions
out of the class definition.
e.g.
void MyString::show(void)
{
      .....
}

I don't think Mystring1="another string" is ok
since what this line actually does is
creates a temperory Mystring Object that contains "another string" and assigns this temmperory object to MyString1
because your MyString class contains pointer type data members
so, =operator will have to be overloaded.

Tell me if this helps

Terry
0
 
learnAuthor Commented:
Edited text of question
0
 
q2guoCommented:
Forget to ask you, what output are you getting anyway?
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
learnAuthor Commented:
Hi Q2guo,

1. The output from my code is something like "ano..er string" including some strange characters!

2. There is no operator (=) overloading in the code, how the string "another string" can go into the class and gave its value to the pointer pstring for Mystring1?

Cheers
0
 
q2guoCommented:
C++ compiler automatically creates the =operator function
for every object.  But, in this case, you don't want to use
the =operator provided by the compiler 'cause it will generate a bug in your program.

DOes mystring2.show() output ok in your program above?
0
 
learnAuthor Commented:
Yes, both Mystring2.Show() and Mystring3.Show() are OK.
0
 
q2guoCommented:
You are saying both Mystring2.show() and Mystring3.show()
work ok or are you saying they both give the correct output?
0
 
learnAuthor Commented:
Both outputs for Mystring2 and Mystring3 were correct.
0
 
q2guoCommented:
I tried out the program on my computer

the only problem I have is the
Mystring1="another string";
line, other than this everything works out fine


0
All Courses

From novice to tech pro — start learning today.