Author: Tony Werten
Date: 02:10:44 01/06/06
Go up one level in this thread
On January 06, 2006 at 03:37:17, Gerd Isenberg wrote: >On January 05, 2006 at 18:33:58, Alexander Kure wrote: > >>On January 05, 2006 at 13:04:29, Mathieu Pagé wrote: >> >>>Hi, I want to push OO to it's limit in order to get cleaner code. Here is what I >>>want to do : >>> >>> >>>class CSquare >>> { >>> private: >>> unsigned int m_uiSquareIndex; >>> public : >>> // the next 3 functions allow CSquare to be used as an unsigned int in >>> // arithmetic operations. >>> inline CSquare(unsigned int); >>> inline CSquare operator=(unsigned int); >>> inline operator unsigned int(); >>> >>> // The next 2 functions are why i'd like to use OOP to make the >>>manipulation >>> // of squares clearer. >>> unsigned int GetColumn() >>> { >>> return m_uiSquareIndex % 8; >>> }; >>> >>> unsigned int GetRow() >>> { >>> return m_uiSquareIndex / 8; >>> }; >>> }; >>> >>> >>>This way I can use CSquare like this : >>> >>> >>>CSquare csq(A1) >>>csq += 8; // One row higher. csq is now equat to A2. >>>csq.GetRow(); // Will return 1 (0 based index) >>>csq.GetColumn(); // will return 0 >>> >>> >>> >>>I think that with basic compiler optimisations like inlining this code will >>>bring no overhead in my engine. I already asked some friends about it and they >>>seem to think like me, but are not sure. >>> >>>Since it's CC related and there is some good programmers monitoring this board I >>>though I would ask here. >>> >>>What is your opinion about this? >>> >>>Mathieu Pagé >> >> >>Hi Mathieu, >> >>Following are a few suggestions: >> >>1) You should declare the following functions const: >> >> operator unsigned int() const; >> unsigned int GetColumn() const; >> unsigned int GetRow() const; >> >>2) An additional constructor would be convenient: >> >> CSquare(unsigned int file, unsigned int row); >> >>Then you would need another conversion function: >> >> unsigned int ToSquare(unsigned int file, unsigned int row) const; >> >>3) Instead of low-levely maipulating a square by means of operator+=() you could >>declare the following high-level functions in class CSquare: >> >> void Up(); >> void Down(); >> void Left(); >> void Right(); >> void Next(); >> void Previous(); > >Isn't it better to return a reference for this functions, to cascade several >directions in one expression? What about throwing an out of board exception? > > >> >>4) You could also declare other convenient functions outside of class CSquare: >> >> bool IsAdjacent(const CSquare&, const CSquare&); > >while polymorphism is a nice thing to have, this function may also be member of >CSquare. > >try >{ > if ( sq1.right().down().isAdjacent(sq2) ) > .... >} >catch (OutOfBoardException e) >{ > printf ("oups %s", e.getErrorString()); >} > >;-) The question was: "is there overhead in OO ? " Whenever you use a try .. catch : YES :) Tony > >Gerd > >> >>5) In your program you could do something like the following: >> >> CSquare sq1(E4); // e4 >> CSquare sq2(3, 3); // d4 >> >> sq1.Right(); >> sq1.Up(); >> sq1.Left(); >> sq1.Down(); >> sq1.Next(); >> sq1.Previous(); >> >> bool adj = IsAdjacent(sq1, sq2); >> >> >>Greetings >>Alex
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.