彩票走势图

C++基础之重载赋值运算符

转帖|其它|编辑:郝浩|2011-07-19 14:52:37.000|阅读 342 次

概述:为了解决上面的问题,我们应该写一个特殊的赋值运算符函数来处理这类问题。当需要为同一个类的两个对象相互赋值时,就可以重载运算符函数。这个方法可以解决类的赋值和指针的释放。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  为了解决上面的问题,我们应该写一个特殊的赋值运算符函数来处理这类问题。当需要为同一个类的两个对象相互赋值时,就可以重载运算符函数。这个方法可以解决类的赋值和指针的释放。

  下面的程序中,类中的赋值函数用new运算符从堆中分配了一个不同的指针,该指针获取赋值对象中相应的值,然后拷贝给接受赋值的对象。

  在类中重载赋值运算符的格式如下:

   void operator = (const Date&) 后面我们回加以改进。目前,重载的运算符函数的返回类型为void。它是类总的成员函数,在本程序红,是Date类的成员函数。它的函数名始终是operator =,参数也始终是同一个类的对象的引用。参数表示的是源对象,即赋值数据的提供者。重载函数的运算符作为目标对象的成员函数来使用。

    #include \"iostream.h\"
    #include \"string.h\"
    class Date
    {
    int mo,da,yr;
    char *month;
    public:
    Date(int m=0, int d=0, int y=0);
    ~Date();
    void operator=(const Date &);
    void display() const;  };
    Date::Date(int m, int d, int y)
    {
    static char *mos[] =
    {
    \ "January\",\"February\",\"March\",\"April\",\"May\",\"June\",
    \ "July\",\"August\",\"September\",\"October\",\"November\",\"December\" };
    mo = m; da = d; yr = y;
    if (m != 0)
    {  month = new char[strlen(mos[m-1])+1];
    strcpy(month, mos[m-1]);
    }
    else month = 0;
    }
    Date::~Date()
    {
    delete [] month;
    }
    void Date::display()
    const
    {
    if (month!=0) cout《month《\' \'《da《\ ",\"《yr《endl;
    }
    void Date::operator=(const Date & dt)
    {
    if (this != &dt)
    {
    mo = dt.mo;
    da = dt.da;
    yr = dt.yr;
    delete [] month;
    if (dt.month != 0)
    {
    month = new char
    [std::strlen(dt.month)+1];
    std::strcpy(month, dt.month);
    }
    else month = 0;
    }
    }
    int main()
    {
    Date birthday(8,11,1979);
    birthday.display();
    Date newday(12,29,2003);
    newday.display();
    newday = birthday;
    newday.display();
    return 0;
    }

   除了为Date类加入了一个重载运算符函数,这个程序和上面的一个程序是相同的。赋值运算符函数首先取得所需的数据,然后用delete把原来的month指针所占用的内存返还给堆。接着,如果源对象的month指针已经初始化过,就用new运算符为对象重新分配内存,并把源对象的month字符串拷贝给接受方。

  重载的Date类赋值运算符函数的第一个语句比较了源对象的地址和this指针。这个操作取保对象不会自己给自己赋值。

  希望通过以上内容对重载运算的介绍,希望能够给你带来帮助。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP