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

运算符重载

九天冥盟 发布于 2016-07-03 22:54, 2878 次点击
引用返回是否可以用无名对象来完成;
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   
这是为什么;   
6 回复
#2
九天冥盟2016-07-03 22:55
其中 cin>>a.string>>b.string;
#3
rjsp2016-07-04 08:17
贴代码吧
#4
九天冥盟2016-07-04 12:41
#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;
}

#5
rjsp2016-07-04 13:21
d = a + b; 红色处进行了浅拷贝,需要重载 deal_string& deal_string::operator=( const deal_string& t )

另外,找本真正的C++的书看看
#6
九天冥盟2016-07-04 19:16
有什么好书推荐
#7
rjsp2016-07-05 08:13
以下是引用九天冥盟在2016-7-4 19:16:19的发言:

有什么好书推荐

任意一本真正的C++书都行,比如 《The C++ Programming Language》《Effective C++》《C++ Primer》等等
1