Exercise #11

Out: Wednesday October 30, 2013
Due: Sunday November 3, 2013 by 5:00pm.
This assigment must be turned in by the due date.


In this exercise we work with C++'s operator overloading facility, with copy constructors, and with move constructors. We redesign and reimplement the polynomial class of exercise 9, making it both easier to use and more efficient.

File /cse/courses/cse333/13au/ex11.tar.gz contains skeleton files for this exercise. You're provided with a complete specification of the Poly class interface, as file Poly.h. (That file also contains implementation tips, so be sure to read through it.) File Poly.cc contains code implementing the public toString method, as well as a private helper function, but all other methods are missing. Your job is to implement them. You're given a complete mainline, as file ex11.cc, that uses many (but not all) of the Poly methods. Finally, you're given a makefile. Command make run will try to build and run the code, disabling the C++ optimization that elides some constructor invocations. Command make run-opt will build and run, allowing that optimization. (make check and make check-opt run valgrind on your executable.)

Once your code is working, the supplied mainline should produce output like this:

$ make run
./ex11
  f = x + 1
  f(2) = 3
(Move constructor)
(Move constructor)
  g = x^2 + 2x + 1
  g(2) = 9
(Copy constructor)
(Copy assign)
(Move constructor)
(Move assign)
  h = x^3 + 3x^2 + 3x + 1
  h(10) = 1331
(The copy and move constructors and assign operators print messages when they're invoked, but the other printing is done by the mainline.)

Note that we will grade your submissions using a mainline different from the one distributed, directly calling each of the methods and checking that the result is correct.

Your code must:

You should submit your exercise to the course dropbox.