Thread overview
question regarding oop
Jun 28, 2008
Moritz
Jun 28, 2008
Simen Kjaeraas
Jun 29, 2008
Moritz
Jun 28, 2008
Jason House
June 28, 2008
Hello everyone,

Im new to the D language and have a question regarding a slightly advanced matter:

Im currently porting the code of a game Im writing to D, and right now Im working on the event handling (reacting to user input).
Since Im doing a strategy game, I have several menues and I need a way to connect a menu to the state my game is in, so when the player clicks somewhere, I can use the hashtable to determine which menu class should react.

I think an asossiative array is the way I should go, key would be the state my game is in and the value would be the corresponding Menu.
But since there are several different menu classes, I need some way to put them all in the value area of the array.

In C++, I could make them all inherit from a specific base class, and use the base class as data type for the value, so I effectively had different menues in one datatype in that hashmap.

How can I do this in D?
June 28, 2008
Moritz <mpipahl@gspgmbh.com> wrote:

> Hello everyone,
>
> Im new to the D language and have a question regarding a slightly advanced matter:
>
> Im currently porting the code of a game Im writing to D, and right now Im working on the event handling (reacting to user input).
> Since Im doing a strategy game, I have several menues and I need a way to connect a menu to the state my game is in, so when the player clicks somewhere, I can use the hashtable to determine which menu class should react.
>
> I think an asossiative array is the way I should go, key would be the state my game is in and the value would be the corresponding Menu.
> But since there are several different menu classes, I need some way to put them all in the value area of the array.
>
> In C++, I could make them all inherit from a specific base class, and use the base class as data type for the value, so I effectively had different menues in one datatype in that hashmap.
>
> How can I do this in D?

The exact same way, for one.


class Menu
{
}

class DerivedMenu : Menu
{
}

Menu[GameState] menuArray;

...

menuArray[currentGameState] = new DerivedMenu();

-- Simen
June 28, 2008
Moritz wrote:

> Hello everyone,
> 
> Im new to the D language and have a question regarding a slightly advanced matter:
> 
> Im currently porting the code of a game Im writing to D, and right now
> Im working on the event handling (reacting to user input).
> Since Im doing a strategy game, I have several menues and I need a way
> to connect a menu to the state my game is in, so when the player clicks
> somewhere, I can use the hashtable to determine which menu class should
> react.
> 
> I think an asossiative array is the way I should go, key would be the state my game is in and the value would be the corresponding Menu. But since there are several different menu classes, I need some way to put them all in the value area of the array.
> 
> In C++, I could make them all inherit from a specific base class, and use the base class as data type for the value, so I effectively had different menues in one datatype in that hashmap.
> 
> How can I do this in D?

Yes.  Classes can inherit from another class.

class base{}
class menuA : public base{}

D allows only one base class, but many interfaces.
June 29, 2008
Thanks a lot to both of you :)

Simen Kjaeraas wrote:
> The exact same way, for one.
> 
> 
> class Menu
> {
> }
> 
> class DerivedMenu : Menu
> {
> }
> 
> Menu[GameState] menuArray;
> 
> ...
> 
> menuArray[currentGameState] = new DerivedMenu();
> 
> -- Simen

Jason House wrote:
> Yes.  Classes can inherit from another class.
>
> class base{}
> class menuA : public base{}
>
> D allows only one base class, but many interfaces.