Thread: could you explain this?

  1. #1
    left crog... back when? incognito's Avatar
    Join Date
    Oct 2001
    Posts
    1,427

    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.........
    There are some real morons in this world please do not become one of them, do not become a victim of moronitis. PROGRAMMING IS THE FUTURE...THE FUTURE IS NOW!!!!!!!!!

    "...The only real game I thank in the world is baseball..." --Babe Ruth

    "Life is beautiful"-Don Corleone right before he died.

    "The expert on anything was once a beginner" -Baseball poster I own.


    Left cprog on 1-3-2005. Don't know when I am coming back. Thanks to those who helped me over the years.

  2. #2
    left crog... back when? incognito's Avatar
    Join Date
    Oct 2001
    Posts
    1,427
    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){}
    There are some real morons in this world please do not become one of them, do not become a victim of moronitis. PROGRAMMING IS THE FUTURE...THE FUTURE IS NOW!!!!!!!!!

    "...The only real game I thank in the world is baseball..." --Babe Ruth

    "Life is beautiful"-Don Corleone right before he died.

    "The expert on anything was once a beginner" -Baseball poster I own.


    Left cprog on 1-3-2005. Don't know when I am coming back. Thanks to those who helped me over the years.

  3. #3
    Registered User
    Join Date
    Oct 2001
    Posts
    2,934
    I sure am glad you spotted it. It's a bit hidden.

  4. #4
    Code Goddess Prelude's Avatar
    Join Date
    Sep 2001
    Posts
    9,897
    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
    My best code is written with the delete key.

  5. #5
    left crog... back when? incognito's Avatar
    Join Date
    Oct 2001
    Posts
    1,427
    Yeah I guess that's what confused me a bit, because I wasn't really used to see the constructor definition like that.
    There are some real morons in this world please do not become one of them, do not become a victim of moronitis. PROGRAMMING IS THE FUTURE...THE FUTURE IS NOW!!!!!!!!!

    "...The only real game I thank in the world is baseball..." --Babe Ruth

    "Life is beautiful"-Don Corleone right before he died.

    "The expert on anything was once a beginner" -Baseball poster I own.


    Left cprog on 1-3-2005. Don't know when I am coming back. Thanks to those who helped me over the years.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Can you explain these bitwise operations?
    By 6tr6tr in forum C++ Programming
    Replies: 6
    Last Post: 10-29-2008, 01:19 PM
  2. Please explain?
    By neo_phyte in forum C Programming
    Replies: 3
    Last Post: 08-25-2006, 05:23 AM
  3. Can someone explain to me what this code means
    By Shadow12345 in forum C++ Programming
    Replies: 3
    Last Post: 12-22-2002, 12:36 PM
  4. Replies: 4
    Last Post: 11-19-2002, 09:18 PM
  5. Can someone explain "extern" to me?
    By valar_king in forum C++ Programming
    Replies: 3
    Last Post: 09-16-2001, 12:22 AM