Example Code for Leak #6 #include <iostream.h> class Point { int x, y; char* color; public: Point(int, int, char*); Point(const Point&); ~Point(); void print(); // Note the commented-out operator= // const Point& operator=(const Point& rhs); }; Point::Point(int new_x, int new_y, char* col) { x = new_x; y = new_y; color = new char[strlen(col)+1]; strcpy(color, col); } Point::Point(const Point& rhs) { x = rhs.x; y = rhs.y; color = new char[strlen(rhs.color)+1]; strcpy(color, rhs.color); Point::-Point()} { delete color; } void Point::print() { cout << ''I'm a point at (''; cout << x <<'', '' << y << '')\n''; cout << ''My color is '' <<color<<''.\n\n''; } // The following operation is a sample // implementation of the overloaded assignment // operator for the Point class. It is important that // the function allow for assignment of one object // to itself. The returned reference is marked // constant so that the return value of overloaded // operator= cannot be used as an lvalue. // That is, (x=y) = z is illegal. /* const Point& Point::opertor=(const Point& rhs) { // Avoid assignment to self. if(this == &rhs) { return(*this); } x = rhs.x; y = rhs.y; delete color; color = new char[strlen(rhs.color)+1]; strcpy(color, rhs.color); return(*this); } */ main() { Point p1(10, 10, ''Blue''); Point p2(15, 18, ''Green"); p1.print(); p2.print(); p2=p1; p1.print(); p2.print(); } |