Skip to main content
gamedev.net
🔒 Locked

How to improve this coding to favour composition over inheritance?

Started by lucky6969b May 21, 2013 at 7:24 AM 4 replies 2.1k views
Original Post
lucky6969b
lucky6969b



class Goods : public Objects

{

public:

    Goods() { }

    Goods(const Goods& goods) { this->mesh = goods.mesh; }

    Goods(SkinnedMesh *_mesh) : Objects(_mesh) { }

}



class Pallet : public Goods

{

    Pallet() { }

    Pallet(const Pallet& pallet) { this->mesh = pallet.mesh; }

    Pallet(SkinnedMesh *_mesh) : Goods(_mesh) { }

};



class Carton : public Goods

{

    Carton() { }

    Carton(const Carton& carton) { this->mesh = carton.mesh; }

    Carton(SkinnedMesh *_mesh) : Goods(_mesh) { }

}

You may consider Pallet and Carton may exhibit different behaviours.

Thanks

Jack

patrrr
patrrr

Is this a school assignment? The first thing I'd look into is the plural class names.

lucky6969b
lucky6969b

Absolutely not. I am just too lazy to spell out the things correctly.

Thanks

Jack

Hodgman
Hodgman
None of those classes do anything.
SkinnedMesh goods;
SkinnedMesh carton;
SkinnedMesh pallet;

You may consider Pallet and Carton may exhibit different behaviours.

It's kind of an incomplete question as is then. What is the purpose of the Pallet and Carton classes? What does the Objects class do? Why do Pallet and Carton inherit Goods to begin with?
eppo
eppo

Drop the Objects and Goods classes.

Make SkinnedMesh *mesh a member of Pallet and Carton.

Sandman
Sandman

It's kind of an incomplete question as is then. What is the purpose of the Pallet and Carton classes? What does the Objects class do? Why do Pallet and Carton inherit Goods to begin with?


Indeed, there isn't any way to 'favour composition over inheritance' because the inheritance doesn't actually do anything.

The only thing we can really suggest with this example is to stop using inheritance pointlessly and dump the Goods, Pallet and Cartons classes, because they don't do anything besides needlessly deepen your inheritance tree.

EDIT: missed the bit about Pallet and Carton exhibiting different behaviours. That does slightly change things, although it's still difficult to answer clearly without a bit more information about what those behaviour differences are.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.