关于双目运算符重载
#include <iostream>
#include <string>
using namespace std;
class Sting//注意这里String中的'S'是大写
{
private:
char *p;
int size;
public:
String();//建立一个空串
String(int sz);
String(char *str);//用C++串来初始化,注意char *str这里实际上就是str是一个串即是一个串对象
String(String &ob);//用串对象来初始化
~String(){delete []p;};
int strsize() {return strlen(p);}//注意这里的p是字符串对象
friend ostream & operator<<(ostream &stream,String & ob);
String operator +(String & ob);
String operator +(char *s);
friend String operator +(char * s,String & ob);)//问题在此!!!这里运算符重载为友元函数的参数有两个,我记得有个规定 第一个形参必须为是友元类的类型啊
};
String::String()
{
size=1;//用来存放结束标志NULL
p=new char[size];
if(p==NULL)
{cout<<"分配内存出错"<<endl;
exit(1);
}
p=NULL;
}
String::String(int sz)
{
size=sz;
p=new char[sz];
if(p==NULL)
{
cout<<"分配内存错误!"<<endl;
exit(1);
}
}
String::String(char *str)
{
size=strlen(str)+1;
p=new char[size];
if(p==NULL)
{
cout<<"分配内存错误"<<endl;
exit(1);
}
strcpy(p,str);
}
String::String(String & ob)
{
size=ob.size;
p=new char[size];
if(p==NULL)
{
cout<<"分配内存出错!"<<endl;
exit(1);
}
strcpy(p,ob.p);
}
ostream & operator <<(ostream & stream,String & ob)
{
stream<<ob.p;
return stream;
}
String String ::operator +(String & ob)
{
//两个串对象的连接
int len;
len=strlen(p)+srlen(ob.p)+1;
String temp(len);
strcpy(temp.p,p);
strcat(temp.p,ob.p);
return temp;
}
String String::operator +(char * s)
{
//一个串对象与一个带引号串的连接
int len;
len=strlen(s)+strlen(p)+1;
String temp(len);
strcpy(temp.p,p);
strcat(temp.p,s);
return temp;
}
String operator +(char * s,String & ob)//问题在此!!!这里运算符重载为友元函数的参数有两个,我记得有个规定 第一个形参必须为是友元类的类型啊
{
int len;
int len;
len=strlen(s)+strlen(p)+1;
String temp(len);
strcpy(temp.p,s);
strcat(temp.p,ob.p);
return temp;
}
请问下双目运算符重载为友元函数 这两个参数有什么规定吗???!!!
我看得<<c++程序设计语言>>中是这样写的:
"双目运算 p1+p2
对于双目运算符+,如果p1为A类的对象,则应当把+重载为A类的友元函数,该函数有两个形参,其中一个形参的类型是A类。经过重载之后,表达式p1+p2就相当于函数调用operator +(p1,p2)"
而我这个串类的定义和实现中的双目运算符重载为友元函数似乎不符合上面的要求啊