有关string中输出运算符<<重载的问题。
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
class string
{
private:
char *str;
int length;
public:
string ();
string (char *);
~string () {delete []str;}
string& operator= (const string &);
friend ostream& operator<< (ostream&,const string &);
};
string::string ()
{
*str =NULL;
length = 0;
}
string::string (char *s)
{
length = strlen(s);
str = new char [length + 1];
strcpy (str, s);
}
string& string::operator= (const string& s)
{
delete [] str;
length = s.length;
str = new char [length + 1];
strcpy (str, s.str);
return *this;
}
ostream& operator<< (ostream &out,const string &s)
{
out << s.str;
return out;
}
void main ()
{
string s1("sandy");
string s2("stony");
string& rs = s1;
string *ps = &s1;
cout << rs << endl;
cout << *ps << endl;
/* rs = s2; // rs still refers to s1,but s1's value is now "stony"
cout << rs << endl;
cout << s1 << endl;
*/
ps = &s2; // ps now points to s2,s1 is unchanged
cout << *ps << endl;
cout << s1 << endl;
}
这样是编译是正确的
如果是#include <iostream>
#include <string>
using namespace std;
这样就有错,不知道是为什么?其中stdlib.h是什么库文件?
using namespace std; 到底是怎么用的?
还有一个程序我怎么改,编译还是不能通过。
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
class String
{
public:
String (const char *str);
String (const String &other);
~String ();
String& operator= (const String &other);
ostream& operator<< (ostream &out, const String &str);
private:
char *m_data;
};
String::String (const char *str)
{
if(str==NULL)
{
m_data = new char[1];
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data, str);
}
}
String::~String ()
{
delete []m_data;
}
String::String (const String &other)
{
int length = strlen (other.m_data);
m_data = new char [length+1];
strcpy (m_data, other.m_data);
}
String& String::operator = (const String &other)
{
if (this == &other)
return *this;
delete []m_data;
int length = strlen (other.m_data);
m_data = new char [length+1];
strcpy (m_data, other.m_data);
return *this;
}
ostream& operator<< (ostream &out, const String &str)
{
out << str.m_data << endl;
return out;
}
void main ()
{
String a = "happy";
String b = " birther!";
String c(a);
b = c;
}