| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2802 人关注过本帖, 1 人收藏
标题:运算符重载
只看楼主 加入收藏
九天冥盟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:20
注 册:2015-7-14
结帖率:36%
收藏(1)
已结贴  问题点数:20 回复次数:6 
运算符重载
引用返回是否可以用无名对象来完成;
deal_string operator + (deal_string & t1, deal_string & t2)
{
    deal_string temp;
    strcpy(temp.string,t1.string);
    strcat(temp.string,t2.string);
    return deal_string(temp.string);
}
 deal_string(char * str);
  deal_string(int n=50);     //构造函数

deal_string a, b;
    cin>>a>>b;
deal_string d ;
    d = a + b ;
    cout<<d.string;
  
输出为,还中止了运行;
葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺G   
这是为什么;   
搜索更多相关主题的帖子: return 
2016-07-03 22:54
九天冥盟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:20
注 册:2015-7-14
收藏
得分:0 
其中 cin>>a.string>>b.string;
2016-07-03 22:55
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
贴代码吧
2016-07-04 08:17
九天冥盟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:20
注 册:2015-7-14
收藏
得分:0 
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;

class  deal_string
{
public:
    deal_string(int n=50):number(n)        //默认构造 和 含参构造 函数; 默认初始化分配50个字节;
    {
        string = new char[ 50 ];
      
    }
    deal_string(char * str)
    {
        number= strlen(str) + 1;
        string= new char[ number ];
        strcpy(string,str);
        cout<<"ok1"<<endl;   
    }
    deal_string(deal_string & t)          //拷贝构造函数;
    {
        for(int i=0; i<t.number; i++)
            string[i] = t.string[i];
        number = t.number;
            cout<<"ok3"<<endl;
    }
    ~deal_string()
    {   delete  []string;  }

    char * string;
    unsigned number;                 //对象不可随意调用private中的成员;
private:
   
    friend deal_string operator +(deal_string & t1,deal_string & t2);      //将两个对象中的string连接在一起;

    friend ostream & operator <<(ostream  & cout, const deal_string &a);
    friend istream & operator >>(istream & cin,deal_string &b);
                                                                            //重载 << ,>> 运算符
};

int main()
{
    deal_string a, b;
    cin>>a>>b;
    deal_string d ;
    d = a + b ;
    cout<<a<<"\t"<<endl;                  
    cout<<d;
    return 0;
}

deal_string operator + (deal_string & t1, deal_string & t2)
{
    deal_string temp;
    strcpy(temp.string,t1.string);
    strcat(temp.string,t2.string);
    return deal_string(temp.string );
}

ostream & operator <<(ostream & cout,const deal_string &a)
{
    cout<<a.string<<endl;
    return cout;
}

istream & operator >>(istream & cin,deal_string & b)
{
    cin>>b.string;
    return cin;
}

2016-07-04 12:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
d = a + b; 红色处进行了浅拷贝,需要重载 deal_string& deal_string::operator=( const deal_string& t )

另外,找本真正的C++的书看看
2016-07-04 13:21
九天冥盟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:20
注 册:2015-7-14
收藏
得分:0 
有什么好书推荐
2016-07-04 19:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用九天冥盟在2016-7-4 19:16:19的发言:

有什么好书推荐

任意一本真正的C++书都行,比如 《The C++ Programming Language》《Effective C++》《C++ Primer》等等
2016-07-05 08:13
快速回复:运算符重载
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016974 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved