首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

operator=有关问题

2012-04-24 
operator问题C/C++ code/***********确定这个类是否需要赋值操作符?**************//*********完全不明白

operator=问题

C/C++ code
/***********确定这个类是否需要赋值操作符?**************//*********完全不明白operator=的作用,求解释!************/#include <iostream>using namespace std;struct NoName{    NoName(): pstring(new pstring), i(0), d(0) {}private:    string *pstring;    int i;    double d;public:    NoName(const NoName &rgs)    {        *pstring = *(rgs.pstring);        i = rgs.i;        d = rgs.d;    }};


[解决办法]
给楼主补了一下重载赋值操作符和析构函数,下面大神有发现错误的话请及时纠正:
C/C++ code
struct NoName{    NoName(): pstring(new pstring), i(0), d(0) {}private:    string *pstring;    int i;    double d;public:    NoName& operator=(const NoName& rgs);    NoName(const NoName &rgs)    {        pstring = new pstring;        *pstring = *(rgs.pstring);        i = rgs.i;        d = rgs.d;    }    ~NoName();};NoName& NoName::operator =(const NoName &rgs){    if(&rgs == this)//防止自赋值    {        return this;    }    *pstring = *(rgs.pstring);    //给三个成员赋值    i = rgs.i;    d = rgs.d;    return this;}NoName::~NoName(){    delete pstring;        //构造函数和复制构造函数里有new的话,析构里也要有delete}
[解决办法]
行不行试试就知道了,呵呵
C/C++ code
#include<iostream>#include<string>using namespace std;struct NoName{    string *pstring;    int i;    double d;public:    NoName(): pstring(new string), i(0), d(0) {}    NoName(const NoName &rgs)    {        *pstring = *(rgs.pstring);        i = rgs.i;        d = rgs.d;    }    ~NoName(){delete pstring;}};int main(){    NoName *a=new NoName();    NoName *b=new NoName();    *a=*b;    b->pstring->append("sdftysd");    cout<<*(b->pstring)<<endl;    cout<<*(a->pstring)<<endl;    delete b;    cout<<*(a->pstring)<<endl;    delete a;} 

热点排行