Author: Alexander Kure
Date: 15:33:58 01/05/06
Go up one level in this thread
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();
4) You could also declare other convenient functions outside of class CSquare:
bool IsAdjacent(const CSquare&, const CSquare&);
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.01 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.