could you explain this?

• 03-01-2002
incognito
could you explain this?
Code:

```//Listing 14.7. Shape classes. #include <iostream> using std::cout; using std::cin; using std::endl; class Shape { public:         Shape(){}         virtual ~Shape(){}         virtual long GetArea() { return -1; } // error         virtual long GetPerim() { return -1; }         virtual void Draw() {} private: }; class Circle : public Shape { public:         Circle(int radius):itsRadius(radius){}         ~Circle(){}         long GetArea() { return 3 * itsRadius * itsRadius; }         long GetPerim() { return 6 * itsRadius; }         void Draw(); private:         int itsRadius;         int itsCircumference; }; void Circle::Draw() {         cout << "Circle drawing routine here!\n"; } class Rectangle : public Shape { public:         Rectangle(int len, int width):         itsLength(len), itsWidth(width){}         virtual ~Rectangle(){}         virtual long GetArea() { return itsLength * itsWidth; }         virtual long GetPerim() {return 2*itsLength + 2*itsWidth; }         virtual int GetLength() { return itsLength; }         virtual int GetWidth() { return itsWidth; }         virtual void Draw(); private:         int itsWidth;         int itsLength; }; void Rectangle::Draw() {         for (int i = 0; i<itsLength; i++)         {                 for (int j = 0; j<itsWidth; j++)                         cout << "x ";         cout << "\n";         } } class Square : public Rectangle { public:         Square(int len);         Square(int len, int width);         ~Square(){}         long GetPerim() {return 4 * GetLength();} }; Square::Square(int len): Rectangle(len,len) {} Square::Square(int len, int width): Rectangle(len,width) {         if (GetLength() != GetWidth())         cout << "Error, not a square... a Rectangle??\n"; } int main() {         int choice;         bool fQuit = false;         Shape * sp;         while ( !fQuit )         {                 cout << "(1)Circle (2)Rectangle (3)Square (0)Quit: ";                 cin >> choice;                 switch (choice)                 {                 case 0:        fQuit = true;                                 break;                 case 1: sp = new Circle(5);                                 break;                 case 2: sp = new Rectangle(4,6);                                 break;                 case 3: sp = new Square(5);                                 break;                 default: cout<<"Please enter a number between 0 and 3"<<endl;                                 continue;                                 break;                 }                 if( !fQuit )                         sp->Draw();                 delete sp;                 sp = 0;                 cout << "\n";         }  int exit;cin>>exit;         return 0; }```

I don't see the defition for the rectangle constructor.....please explain.........
• 03-01-2002
incognito
never mind I see it now.....it's just a little bit different that usual (for the book)
Rectangle(int len, int width):
itsLength(len), itsWidth(width){}
• 03-01-2002
swoopy
I sure am glad you spotted it. It's a bit hidden.
• 03-01-2002
Prelude
The author didn't exactly try to hide it, it's where the constructor usually is placed (as the first public method). Of course I would have done it a different way when using an initializer list, either make the definition global and comment so that everything is nice and neat and easy to find:
Code:

```// Constructor fleshy Rectangle::Rectangle(int len, int width):   itsLength(len), itsWidth(width) { }```
or put it all on one line inside the class so that it's easier to read:
Code:

`Rectangle(int len, int width): itsLength(len), itsWidth(width) {}`
It was probably broken into two lines for space sake, but to some that would make it very difficult to follow, especially people who don't see initializer lists often.

-Prelude
• 03-01-2002
incognito
Yeah I guess that's what confused me a bit, because I wasn't really used to see the constructor definition like that.