注册 登录
编程论坛 C++教室

帮忙修改一下C++程序

yjbgwxf2008 发布于 2008-03-21 23:30, 1735 次点击
#include<iostream.h>
#include<string.h>
class jia
{
public:
   jia(char stl[5]);
   jia operator+(jia );
   void show();
 private:
    char str[5];
};
jia::jia(char stl[5])
{
    strcpy(str,stl);
}
jia jia::operator+(jia)
{
    jia A,B;
    return strcat(A.str,B.str);

}
void jia::show()
{
    cout<<str<<endl;
}
void main()
{
    jia A="abcd";
    jia B="efgh";
    A.show();
    B.show();
    (A+B).show();
}
20 回复
#2
zjl1382008-03-21 23:37
jia(char stl[5]);
jia::jia(char stl[5])
这两句中的stl[5]都只是一个值,这不是你想要的吧!
试改成jia(char *str)试一下,两处都要改!
#3
sunkaidong2008-03-21 23:46
#include<iostream.h>
#include<string.h>
class jia
{
public:
   jia(char stl[]);
   jia* operator +(jia &a );
   void show();
private:
    char str[50];
};
jia::jia(char stl[])
{
    strcpy(str,stl);
};
jia* jia::operator +(jia& a)
{
    //jia A,B;
    return new jia(strcat(this->str,a.str));

}
void jia::show()
{
    cout<<str<<endl;
}
void main()
{
    jia A="abcd";
    jia B="efgh";
    jia *c=A+B;
    A.show();
    B.show();
    c->show();
}
#4
sunkaidong2008-03-22 09:05
#include<iostream.h>
#include<string.h>
class jia
{
public:
   jia(char stl[]);
   jia& operator +(jia &a );
   void show();
private:
    char str[50];
};
jia::jia(char stl[])
{
    strcpy(str,stl);
};
jia& jia::operator +(jia& a)
{

    return jia(strcat(this->str,a.str));

}
void jia::show()
{
    cout<<str<<endl;
}
void main()
{
    jia A="abcd";
    jia B="efgh";
    jia c=A+B;
    A.show();
    B.show();
    c.show();
}
#5
newyj2008-03-22 10:11
jia(char stl[5]);中的stl[5]和stl[]是否相同?
jia* jia::operator +(jia& a)
{
    //jia A,B;
    return new jia(strcat(this->str,a.str));中的new jia(strcat(this->str,a.str)不是很懂
是动态分配吗? this->str 指的是什么?
#6
sunkaidong2008-03-22 10:39
指代自己...其实可以把A+B这样理解..A找到自己的成员函数...B是参数..那么*this就是代的是自己...
#7
newyj2008-03-22 10:54
就是说*this指代的是B吗 实在不好意思 对*this 还是 不怎么懂
#8
sunkaidong2008-03-22 11:01
带A...B是参数.....
#9
handongxue2008-03-25 16:43
+操作符重载错误,修改后如下:
#include<iostream>
#include<cstring>
using namespace std;


class jia
{
public:
   jia(char stl[]="");
   jia operator+(const jia &A);
   void show();
private:
    char str[15];
};
jia::jia(char stl[])
{
    strcpy(str,stl);
}
jia jia::operator+(const jia &A)
{
    jia B(str);strcat(B.str,A.str);
    return B;

}
void jia::show()
{
    cout<<str<<endl;
}
void main()
{
    jia A="abcd";
    jia B="efgh";
    A.show();
    B.show();
    (A+B).show();
}
#10
sunkaidong2008-03-25 16:47
楼上的副本拷贝好像不安全。。。。还有局域变量的生存期的问题。。。
#11
bcxye2008-03-26 11:00
好厉害,学习ing
#12
VanHorn2008-03-26 21:58
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-3-22 09:05 的发言:[/bo]

#include
#include
class jia
{
public:
   jia(char stl[]);
   jia& operator +(jia &a );
   void show();
private:
    char str[50];
};
jia::jia(char stl[])
{
    strcpy(str,stl);
};
jia& jia::operator +(jia &a )...


sunkaidong,问问你啊,为什么你在重载这个加法运算符的时候,参数和返回值都要返回引用呢?我也看到有很多人在重载运算符的时候喜欢用引用,其实不用引用,申明成jia operator +(jia a );实现的时候:
jia jia::operator +(jia a)
{
   
    strcat(str,a.str);
    return *this;

}

也是可以的啊?这样和引用有什么区别吗?

[[it] 本帖最后由 VanHorn 于 2008-3-26 22:10 编辑 [/it]]
#13
sunkaidong2008-03-26 22:03
你看看书..对于应用是起别名...不需要副本拷贝...节省时间..对于副本小的没什么区别..对于大的不说你也知道....一种习惯.....
#14
VanHorn2008-03-26 22:12
哈哈。我们都出了一个问题。str是私有的。不能用对象访问。
#15
VanHorn2008-03-26 22:22
// 修改一个程序.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream.h>
#include<string.h>

class jia
{
public:
    char* getstr();
   jia(char stl[]);
   jia operator +(jia a );
   void show();
private:
    char str[50];
};
jia::jia(char stl[])
{
    strcpy(str,stl);
};

jia jia::operator +(jia a)
{
    
    strcat(str,(a.getstr() ) );

    return *this;

}
void jia::show()
{
    cout<<str<<endl;
}

char* jia::getstr()
{
    return str;

}



void main()
{
    jia A="abcd";
    jia B="efgh";
    jia c=A+B;
    A.show();
    B.show();
    c.show();
}
这样才对。我编译过了。
#16
sunkaidong2008-03-26 22:40
没有错..你看看结果....
#17
sunkaidong2008-03-26 22:42
我还有一个友员的
#include<iostream.h>
#include<string.h>
namespace a{
class jia
{
public:
   jia(char stl[])
   {
    strcpy(str,stl);
   };
   friend jia operator +(jia & b,jia & a )
   {

    return jia(strcat(b.str,a.str));

   };
   void show()
   {
    cout<<str<<endl;
   }
private:
    char str[50];
};
}
void main()
{
    a::jia A="abcd";
    a::jia B="efgh";
    a::jia c=A+B;
    A.show();
    B.show();
    c.show();
}
#18
sunkaidong2008-03-26 22:52
如果想了解概念可以看java里面的..私有的访问概念很清楚....概念是这样说的只能被类自己访问....相当在类里面定义自己一个引用....只要类名字就可以访问私有成员了....下次不要轻易说别人错了.....呵呵

#include<iostream.h>
#include<string.h>
class jia
{
public:
   jia(char stl[]);
   jia operator +(jia &a );
   void show();
private:
    char str[50];
};
jia::jia(char stl[])
{
    strcpy(str,stl);
};
jia jia::operator +(jia& a)
{

    return jia(strcat(this->str,a.str));

}
void jia::show()
{
    cout<<str<<endl;
}
void main()
{
    jia A="abcd";
    jia B="efgh";
   
    A.show();
    B.show();
    jia c=A+B;
    c.show();
}
#19
VanHorn2008-03-26 23:00
#include "stdafx.h"
#include<iostream.h>
#include<string.h>

class jia
{
public:
    void Setstr(char* lstr);
    char* getstr();
   jia(char stl[]);
   jia operator +(jia a );
   void show();
private:
    char str[50];
};
jia::jia(char stl[])
{
    strcpy(str,stl);
};

jia jia::operator +(jia a)
{
    
    jia b(str);
    char* tempstr;
    tempstr=b.getstr();
    strcat(tempstr,(a.getstr() ) );
    b.Setstr(tempstr);
    return b;

}
void jia::show()
{
    cout<<str<<endl;
}

char* jia::getstr()
{
    return str;

}

void jia::Setstr(char* lstr)
{
    strcpy(str,lstr);

}

void main()
{
    jia A="abcd";
    jia B="efgh";
    jia c=A+B;
    A.show();
    B.show();
    c.show();
}



修改了一个完美版的。先前的那个在A+B的时候会改变A的值。这时我们不希望的。哈哈。一个修改好的程序,还是不适应用引用啊。
#20
sunkaidong2008-03-26 23:05
我开始的程序有点问题是引用一起的..其它没什么问题..当然楼上改的不错...用string 更好点....
#21
xiang12342008-04-05 10:54
日流量10万的建站铺寻求友情链接

建站铺寻求友情链接

日流量10万的建站铺寻求友情链接

[url=http://www.]http://www.[/url]

logo地址: [url=http://www.]" border="0" />[/url]

日流量10万的建站铺寻求友情链接

建站铺寻求友情链接

日流量10万的建站铺寻求友情链接

http://www.

logo地址: http://www.

[url=http://www.]" border="0" />[/url]
1