vendredi 26 août 2022

Design problem when a base client uses a base class as input and derived client uses a derived class as input

My goal is to have a base client use a base class as an input. I would like to be able to extend the implementation of the base client through a derived client that takes a derived class as an input.

struct Base
{
    int a, b, c;
    ...
};

struct Derived: public Base
{
    int d, e;
    ...
};

class BaseClient
{
public:
    BaseClient(const Base& b) : b(b)
    {}
    void processA(){...}
    void processB(){...}
    ...

private:
    Base b;
};

class DerivedClient : public BaseClient
{
public:
    DerivedClient(const Derived& d) : BaseClient(d), d(d)
    {}
    void processD(){...}
    void processE(){...}
    ...

private:
    Derived d;
};

The bulk of the implementation is done in the BaseClient so taking advantage of that is a must. The problem I am having is that the Base class can get accessed in two different ways in the DerivedClient class. Once through the BaseClient and another through the Derived class data member. What is the best design practice in this situation?

Aucun commentaire:

Enregistrer un commentaire