以友元函数的方式重载流插入运算符“<<“:实现字符串的输出
#include <iostream>
using namespace std;
const int maxsize = 256;
class mystring
{
char str[maxsize];
int len;
public:
mystring()
{
len = 0;
str[0] = '\0';
cout << "缺省构造函数" << endl;
}
mystring(char* s)
{
int i = 0;
for (i = 0; s[i] != '\0'; i++)
{
str[i] = s[i];
}
len = i;
cout << "构造函数(用C风格字符串初始化)" << endl;
}
mystring(mystring& ms)
{
len = ms.len;
for (int i = 0; i < len; i++)
{
str[i] = ms.str[i];
}
cout << "拷贝构造函数" << endl;
}
~mystring()
{
cout << "析构函数" << endl;
}
void show()
{
for (int i = 0; i < len; i++)
{
cout << str[i];
}
cout << '\n';
}
};
int main()
{
char str[21] = "Hello";
mystring A(str);
mystring B ="C++";
mystring C;
C = A;
cout << C;
C = A + B;
cout << C;
return 0;
}
mystring B ="C++";这么写不对啊。代码中有一些错误,也一起改掉了,代码如下:
#include <iostream>
using namespace std;
const int maxsize = 256;
class mystring
{
char str[maxsize];
int len;
public:
mystring()
{
len = 0;
str[0] = '\0';
cout << "缺省构造函数" << endl;
}
mystring(const char* s)
{
int i = 0;
for (i = 0; s[i] != '\0'; i++)
{
str[i] = s[i];
}
str[i] = 0;
len = i;
cout << "构造函数(用C风格字符串初始化)" << endl;
}
mystring(mystring& ms)
{
len = ms.len;
for (int i = 0; i < len; i++)
{
str[i] = ms.str[i];
}
cout << "拷贝构造函数" << endl;
}
~mystring()
{
cout << "析构函数" << endl;
}
/*void show()
{
for (int i = 0; i < len; i++)
{
cout << str[i];
}
cout << '\n';
}*/
friend ostream& operator << (ostream& os,mystring & s);
friend mystring operator +(mystring& s1, mystring& s2);
};
ostream& operator << (ostream& os, mystring& s)
{
int i = 0;
for (; i < s.len && s.str[i] != '\0'; i++)
cout << (char)s.str[i];
return os;
}
mystring operator +(mystring& s1, mystring& s2)
{
mystring s3;
int i = 0;
int k = 0;
while (s1.str[i])
{
s3.str[k] = s1.str[i];
i++;
k++;
}
i = 0;
while (s2.str[i])
{
s3.str[k] = s2.str[i];
i++;
k++;
}
s3.str[k] = 0;
s3.len = k;
return s3;
}
int main()
{
char str[21] = "Hello";
mystring A(str);
mystring B("C++");
mystring C;
C = A;
cout << C;
C = A + B;
cout << C;
return 0;
}
#include <iostream>
using namespace std;
const int maxsize = 256;
class mystring
{
char str[maxsize];
int len;
public:
mystring()
{
len = 0;
str[0] = '\0';
cout << "缺省构造函数" << endl;
}
mystring(char* s)
{
int i = 0;
for (i = 0; s[i] != '\0'; i++)
{
str[i] = s[i];
}
len = i;
cout << "构造函数(用C风格字符串初始化)" << endl;
}
mystring(mystring& ms)
{
len = ms.len;
for (int i = 0; i < len; i++)
{
str[i] = ms.str[i];
}
cout << "拷贝构造函数" << endl;
}
~mystring()
{
cout << "析构函数" << endl;
}
void show()
{
for (int i = 0; i < len; i++)
{
cout << str[i];
}
cout << '\n';
}
friend ostream &operator<<( ostream &output, const mystring &s )
{
output << s.str;
return output;
}
};
int main()
{
char str[21] = "Hello";
mystring A(str);
mystring B ("C++");
mystring C;
C = A;
cout << C;
return 0;
}