c++重载的问题

#include <iostream.h>
#include <cstring>
class Mystring
{
public:
void output();
void Mystring::create(char *s);
friend Mystring operator +(Mystring &b,Mystring &c);//重载+号运算符
private:
char *str;//指针字符型私有成员
};
int main()
{
char a1[100],a2[100],a3[100];
Mystring a,b,c;
a.add();
cout<<"Please input the string of b"<<endl;
cin.getline(a1,100);
b.create(a1);
cout<<endl;
cout<<"Please input the string of c"<<endl;
cin.getline(a2,100);
c.create(a2);
cout<<endl;
a=b+c;
a.output();
cout<<endl;
return 0;
}

void Mystring::create(char *s)//定义Mystring的create成员函数
{
str=new char[strlen(s)+1];//运用到析构函数,分配动态字符型数组内存空间,
strcpy(str,s);
}

Mystring operator +(Mystring &b,Mystring &c)//对Mystring类的+运算符函数进行重载
{
Mystring a;
a.str=strcat(b.str,c.str);
return a;
}
void Mystring::output()
{
cout<<"the string of a is"<<endl;
cout<<str<<endl;
}
在自学C++,想做一个a,b,c重载的加法运算符,下面的是错误提示,求解答,谢谢

楼主大体都是正确的只有一处小错误和一处不足的地方已经改正过来
class Mystring
{
public:
void output();
void Mystring::create(char *s);
friend Mystring operator +(Mystring &b,Mystring &c);//重载+号运算符
private:
char *str;//指针字符型私有成员
};
int main()
{
char a1[100],a2[100],a3[100];
Mystring a,b,c;
// a.add();//注意这里!!!
cout<<"Please input the string of b"<<endl;
cin.getline(a1,100);
b.create(a1);
cout<<endl;
cout<<"Please input the string of c"<<endl;
cin.getline(a2,100);
c.create(a2);
cout<<endl;
a=b+c;
a.output();
b.output();
c.output();
cout<<endl;
return 0;
}

void Mystring::create(char *s)//定义Mystring的create成员函数
{
str=new char[strlen(s)+1];//运用到析构函数,分配动态字符型数组内存空间,
strcpy(str,s);
}

Mystring operator +(Mystring &b,Mystring &c)//对Mystring类的+运算符函数进行重载
{
Mystring a;
a.str=new char[strlen(b.str)+strlen(c.str)+1];//给a动态分配内存空间
strcpy(a.str,b.str);//保证b不被修改
strcat(a.str,c.str);
return a;
}
void Mystring::output()
{
cout<<"the string of a is"<<endl;
cout<<str<<endl;
}
谢谢~
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-30
首先有个问题
主函数中的a.add()是干什么用的?
这个函数不要的话,整个程序是可以运行的。
只是在vs中需要把#include<iostream.h>改成#include<iostream>

不过这个程序存在一个比较严重的问题,
就是在如下这段代码中:
Mystring operator +(Mystring &b,Mystring &c)//对Mystring类的+运算符函数进行重载
{
Mystring a;
a.str=strcat(b.str,c.str);
return a;
}

按照这种写法,b中的字符串会因此发生变化。

字符串的拷贝顺序应该是先把b中的字符串拷贝到a中,
然后再把c中的字符串追加拷贝到a中
第2个回答  2010-05-25
char a1[100],a2[100],a3[100];
Mystring a,b,c;
a.add();

你的add()在哪?
第3个回答  2010-05-25
对于加法“+”而言,一般是不应改变两个加数的值的,即a = b + c;表达式中,b和c的值不应由于做了加法运算而改变。所以,在你的代码中:
Mystring operator +(Mystring &b,Mystring &c)//对Mystring类的+运算符函数进行重载
{
Mystring a;
a.str=strcat(b.str,c.str);
return a;
}
strcat(b.str,c.str);实质上是把c的字符串给加到b后了,即b的值已经发生了改变,问题就在这儿。
应该改为:
Mystring operator +(Mystring &b,Mystring &c)
{
Mystring a;
strcpy(a.str,b.str);
strcat(a.str,c.str);
return a;
}

求助,关于一道C++函数重载的问题
1、运算符重载不改变操作符原先的优先级、结合性和操作数数目,++是单目操作符,所以1不会成立的。你有这样的问题大概是因为双目操作符比如*,可以有x.operator*(y)这种写法吧? 但是这个不改变*是二目操作符的事实。C++规定:双目操作符重载作为成员函数时只能有一个形参,调用方为左操作数,形参...

c++重载问题
你应该先把++前增与后增看一下 二者最后的结果都是把该数+1,但 前增是要自增后的结果,后增是要自增前的结果,重载前增后增是有区别的 后增参数必须有一个int值,任何值都 可以,只要是int就行 目的是区别前增与后增 试想这样你能区分出哪个是前哪个是后 COpertor& COpertor::operator...

c++重载的一个问题
ostream& operator<<(ostream& os,const str s)在这一行首部添加 friend。参数const str s可以改为const str & s,传引用稍稍高效,免去了实参到形参的复制。顺带提一下:<< 输出运算符决不要弄成 成员运算符。否则用起来很怪异:比如你的对象名字叫obj,那么你得这样调用输出 : obj<<cout;...

关于c++中重载的问题
函数重载是指对现有的函数进行重载,重载函数与被重载的函数的函数名相同,但参数类型、参数个数和返回类型中有一个或者多个不同,以示区别 运算符重载是指对C++中部分运算符赋予其它功能

简单C++重载问题
因为你重写C0的虚函数数不规范,导致系统认为你写的是另一个函数,具体如下:在 C0 中为 void Set1(int i);在 C1 中为 int Set1(float i);系统判定虚函数有三个要求:1.与基类函数同名;2.有相同的参数个数及对应类型;3.有相有返回值或满足类型兼容规则的指针,引用的返回值;你写的函数只有...

c++ 函数重载问题
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。

请教关于C++中重载的问题1
指针P声明为公有的才能访问,就按友好函数访问的权限解释,因为你在重载函数中用到了Strcmp库函数,而它并不是类String的友好函数,因此是不能访问到指针P的 include <iostream> include<string> using namespace std;class String { public:String(){p=NULL;} String(char *str);friend bool ...

C++重载问题
把 “int main()”改成int main()”即可。原来的括号是中文输入状态下的,系统会报错。

C++ 重载问题
其他问题楼上的几位已经提出来了,现在我来说说Printf()总是输出4705936,问题出在“+”重载函数中以下两处:int len=strlen(s1); \/\/这里返回的字符串长度是对的 char t1[maxsize];for(int i=0;i<len,*s1!='\\0';i++){ t1[i]=*s1;s1++; \/\/Oh, My God! 看得我蛋疼,居然在修改最...

关于C++重载的一个问题求解~~
如,C++本身支持下面的转换 char a = '0';int i = (int)a;或者写成int i = int(a);现在有了如上定义,也有类似的形式了 complex a;double i = double(a);这样可以将类complex的对象转换为double,因为上面的重载提供了这样的转换方法。

相似回答
大家正在搜