2
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... */ }

};

上記の例のように、派生クラスで使用される可能性のあるすべての関数を基本クラスに配置することで、設計上の問題や予期しない結果が発生する可能性はありますか?

4

1 に答える 1

2

これらのすべての関数がすべての派生クラスに実装されるようにする(強制する)場合は、それらを純粋な仮想にする必要があります。それ以外の場合、空の本体ですべての可能な関数を事前に決定してリストしようとしても、あまり意味がありません。あなたの例から判断すると、複数のレベルの継承が必要なようです。

于 2012-01-09T00:44:22.233 に答える