欢迎来到山村网

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

2019-03-02 09:55:57浏览:18 来源:山村网   
核心摘要:  为了解决上面的问题,我们应该写一个特殊的赋值运算符函数来处理这类问题。当需要为同一个类的两个对象相互赋值时,就可以重

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

  下面的程序中,类中的赋值函数用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指针。这个操作取保对象不会自己给自己赋值。

(责任编辑:豆豆)
下一篇:

C语言基础之文件操作基本常识

上一篇:

C语言程序设计之命令行参数

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com