// Standard Shell for C++ Courseware // Copyright 1997 // College of Computer Science // Northeastern University Boston MA 02115 // This software may be used for educational purposes as long as this copyright // notice is retained at the top of all files // Should this software be modified, the words "Modified from Original" must be // included as a comment below this notice // All publication rights are retained. This software or its documentation may // not be published in any media either in whole or in part. /////////////////////////////////////////////////////////////////////////////// // Lab: Name and purpose of the lab or program // Goals: What students are going to learn from it // STUDENT NAME: %?%?% // STUDENT ID: %?%?% // DATE: %?%?% /////////////////////////////////////////////////////////////////////////////// #include "SWindows.h" // set up for windows #include "IOTools.h" // tools for safe I/O #include "Graphics.h" // graphics functions & RGB definition #include "RGBNames.h" // RGB names #include "Random.h" // random numbers #include "FileTool.h" // file tools #include "Text.h" // fonts and text #include "Delay.h" // delay controls #include "Basic2D.h" // 2D vector, point, rect #include "Polar2D.h" // 2D polar in radians or degrees #include "Scale.h" // 1D scaling #include "Scale2D.h" // 2D scaling #include "Plot2D.h" // 2D plotting #include "DblFcn.h" // double function template class // prototypes void main(); class myPoint { public: int x; int y; myPoint( int x0, int y0 ){ x = x0; y = y0; cout << "myPoint constructor type 2\n"; } myPoint() { // myPoint() : x(0), y(0) { cout << "..." } x = 0; y = 0; cout << "myPoint default constructor\n"; } ~myPoint() { cout << "myPoint destructor\n";} }; class StickPic { private: int size; myPoint pts [10]; // makes 10 calls to myPoint contructor public: StickPic() { // constructor cout << "StickPic contructor\n"; size = 0; } void addStick( int dx, int dy ){ // the current point in pts, // the coords of the end of the stick // relative to the 1st point // are written into pts[ size ] size++; pts[ size ].x = dx; pts[ size ].y = dy; } // what happens to pts[0] in the above code? Can you improve // the code? void Draw( int x0, int y0) ; // definitionj follows // void Erase( ); }; void StickPic::Draw( int x0, int y0 ){ MoveTo( x0, y0 ); // puts the pen at the point with coords x0, y0 for(int i=0; i<size; i++) Line( pts[i].x , pts[i].y ); // displaces the pen from current point } // definitions void main() { // open text and drawing windows BigSquarePair(14); // do the work here StickPic h; h.addStick( 0, -40 ); // /\ h.addStick( 30, -60 ); // / \ 20 (height of the roof) h.addStick( 60, -40 ); // / \ h.addStick( 60, 0 ); // | | 40 h.addStick( 0, 0 ); // |_____| // 60 // the above code, alas, doesn't draw a house // because Line(dx, dy) draws a line segment between // the current pen position and the point displaced // by dx, dy , whereas the coords above are all relative // to the lower left corner of the house. // You need to change the code for StickPic so that it // works with the inputs as above, or change the inputs. h.Draw( 200, 200 ); // Implement Erase() . You will need to add data members // to the StickPic class. // done PressReturn("Done!"); }