![]() |
#2
linw12252011-05-19 17:53
|

#include<iostream.h>
#include<string.h>
class String
{
public:
String(string);
~String();
void Show();
friend bool operator == (const String &s1,const String &s2);
friend String operator >(const String &s1,const String &s2);
private:
string str;
};
String::String(int s)
{
str=s;
}
String::~String()
{}
void String::Show()
{
cout<<str<<endl;
}
bool operator == (const String &s1,const String &s2)
{
return (s1.str==s2.str);
}
String operator >(const String &s1,const String &s2)
{
if(s1.str>s2.str)
return s1;
else
return s2;
}
int main()
{
string a,b;
cin>>a;
cin>>b;
String s1(a),s2(b),s3;
if(s1==s2)
cout<<"相等"<<endl;
else
cout<<"不"<<endl;
s3=(s1>s2);
s3.Show();
return 0;
}
#include<string.h>
class String
{
public:
String(string);
~String();
void Show();
friend bool operator == (const String &s1,const String &s2);
friend String operator >(const String &s1,const String &s2);
private:
string str;
};
String::String(int s)
{
str=s;
}
String::~String()
{}
void String::Show()
{
cout<<str<<endl;
}
bool operator == (const String &s1,const String &s2)
{
return (s1.str==s2.str);
}
String operator >(const String &s1,const String &s2)
{
if(s1.str>s2.str)
return s1;
else
return s2;
}
int main()
{
string a,b;
cin>>a;
cin>>b;
String s1(a),s2(b),s3;
if(s1==s2)
cout<<"相等"<<endl;
else
cout<<"不"<<endl;
s3=(s1>s2);
s3.Show();
return 0;
}
这段代码是错误的。
会产生如下错误:
2011051901.cpp(36) : error C2248: 'str' : cannot access private member declared in class 'String'
当然,错误不只这一个,其他的错误跟这个一样。
问了老师,她说私有数据里面不能有string类型。
然后我改了下代码把string类型换成int的话就正确。
就是想问:
1、运算符重载里面string类型为什么不能使用?
2、不使用运算符重载,一般的类里面是不是就可以用到string类型?
3、接上一问,如果string类型不能用,那么我想表示一个不限长度的字符串,是不是只能用char *str;?
4、假如私有数据类型里面的那个是int类型,头文件定义要定义成#include<iostream.h>
是不是所有关于运算符重载的头文件定义都必须是:#include<iostream.h>
而不能是#include<iostream>
using namespace std;