QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 931|回复: 9

关于字符的+重载

[复制链接]
发表于 2005-1-23 17:36:52 | 显示全部楼层 |阅读模式
#include <iostream>
using namespace std;
class Strings
{
        private:
                char *str;
        public:
                Strings(char *s=" ");
                ~Strings()
                {
                        delete str;
                }
                Strings & operator +(Strings &);
                char* getStrings();
                Strings& operator = (Strings&);
};
Strings::Strings(char *s)
{
        str=new char[strlen(s)+1];
        strcpy(str , s);
}
char * Strings:: getStrings()
{
        return str;
}
Strings& Strings:: operator +(Strings& obj1)
{
        Strings obj2;
        obj2.str=new char[strlen(str)+strlen(obj1.str)+1];
        strcpy(obj2.str , obj1.str);
        strcat(obj2.str , str);
        return obj2;
}
Strings& Strings:: operator =(Strings& obj1)
{
        str=new char[strlen(obj1.str)+1];
        strcpy(str,obj1.str);
        return *this;
}
int main()
{
        Strings str1("Hacker and cracker ");
        Strings str2("is my leixiang ");
        Strings str3;
        str3=str1+str2;
        cout<<str3.getStrings();
        cout<<endl;
}
抱段错误
谢谢!!!
发表于 2005-1-23 21:55:46 | 显示全部楼层
你的obj2是一个局部对象,却被返回引用。
回复

使用道具 举报

 楼主| 发表于 2005-1-23 23:04:34 | 显示全部楼层
但是,如果我的成员char *str;而是int a;的话obj2被返回引用就好用
回复

使用道具 举报

发表于 2005-1-24 00:54:45 | 显示全部楼层
[quote:b45f7a3859="ruchong"]但是,如果我的成员char *str;而是int a;的话obj2被返回引用就好用[/quote]看看你的程序。

你贴出来的那个很明显有两个错误。一是我先说的,二是你分配的字串没有释放。
回复

使用道具 举报

 楼主| 发表于 2005-1-24 11:04:20 | 显示全部楼层
我不是有
~Strings()
{
delete str;
}
请指点一下
回复

使用道具 举报

发表于 2005-1-24 12:45:31 | 显示全部楼层
[quote:5541f56f9e="ruchong"]我不是有
~Strings()
{
delete str;
}
请指点一下[/quote]

好像这个是在程序结束后作的工作吧?
也许应该在程序运行的时候就释放—
(不知道的问题)
回复

使用道具 举报

发表于 2005-1-24 18:35:41 | 显示全部楼层

Re: 关于字符的+重载

[quote:f20b620f9d="ruchong"]

Strings& Strings:: operator +(Strings& obj1)
{
        Strings obj2;
        obj2.str=new char[strlen(str)+strlen(obj1.str)+1];
        strcpy(obj2.str , obj1.str);
        strcat(obj2.str , str);
        return obj2;
}
[/quote]
obj2是一个局部变量,在函数返回后就消失了。但你却将其返回引用,它能指向哪儿?我说的没有释放的是这个函数里的obj2.str=....这一句,同样,}之后,obj2都不存在了,如何能调用它的析构函数。
回复

使用道具 举报

发表于 2005-1-26 22:33:43 | 显示全部楼层
[quote:1de4d8f6d7="DexterK"][quote:1de4d8f6d7="ruchong"]我不是有
~Strings()
{
delete str;
}
请指点一下[/quote]

好像这个是在程序结束后作的工作吧?
也许应该在程序运行的时候就释放—
(不知道的问题)[/quote]
new 出来的一块内存,能用这个语句来释放吗?这样释放,的确编译和链接都没

问题,但是是错误的,应该这样:

delete [] str ;

其余的地方没仔细看。
回复

使用道具 举报

发表于 2005-1-26 22:34:56 | 显示全部楼层
补充一下,绝不能返回一个局部对象的引用,这是C++的一个规定。希望以后能记住!
回复

使用道具 举报

发表于 2005-2-2 17:43:44 | 显示全部楼层
字符的+也能重载?不懂……

什么时候内置的类型也能重载了?

看楼主的代码似乎是string,字符串类的重载……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 16:40 , Processed in 0.066433 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表