How to improve this coding to favour composition over inheritance?

Started by
4 comments, last by Sandman 10 years, 11 months ago


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

Advertisement

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

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

Thanks

Jack

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?

Drop the Objects and Goods classes.

Make SkinnedMesh *mesh a member of Pallet and Carton.

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.

This topic is closed to new replies.

Advertisement