размещение функций, которые будут использоваться какими-либо производными классами в базовом классе? - PullRequest
2 голосов
/ 09 января 2012
class tabBase
{

public:
    tabBase() { }
    virtual ~tabBase() { }

    virtual void write() {}
    virtual void read() {}
    virtual void start() {}
    virtual void stop() {}
    virtual void connect() {}
    virtual void disconnect() {}
    virtual void openFile() {}
    virtual void closeFile() {}
    virtual void searchForText() {}

};

class tcpServerTab : public tabBase
{

public:
    tcpServerTab() { /* ...code... */ }
    virtual ~tcpServerTab() { /* ...code... */ }

    virtual void write() { /* ...code... */ }
    virtual void read() { /* ...code... */ }
    virtual void start() { /* ...code... */ }
    virtual void stop() { /* ...code... */ }

};

class tcpClientTab : public tabBase
{

public:
    tcpClientTab() { /* ...code... */ }
    virtual ~tcpClientTab() { /* ...code... */ }

    virtual void write() { /* ...code... */ }
    virtual void read() { /* ...code... */ }
    virtual void start() { /* ...code... */ }
    virtual void stop() { /* ...code... */ }

    virtual void connect() { /* ...code... */ }
    virtual void disconnect() { /* ...code... */ }

};

class plainTextTab : public tabBase
{

public:
    plainTextTab() { /* ...code... */ }
    virtual ~plainTextTab() { /* ...code... */ }

    virtual void openFile() { /* ...code... */ }
    virtual void closeFile() { /* ...code... */ }
    virtual void searchForText() { /* ...code... */ }

};

Есть ли или могут быть какие-либо проблемы с дизайном или непредвиденные последствия размещения всех возможных функций для использования какими-либо производными классами в базовом классе, как это делает приведенный выше пример?

1 Ответ

2 голосов
/ 09 января 2012

Если вы хотите (принудительно) обеспечить, чтобы все этих функций были реализованы в всех производных классах, вы должны сделать их pure virtual.В противном случае попытка предопределить и перечислить все возможные функции с пустыми телами просто не имеет большого смысла.Судя по вашему примеру, вам кажется, что вам нужно более одного уровня наследования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...