0
class a
{
    public:
        a(int);    
        virtual ~a();
        virtual void print();
        int getNumber()
    private:
        int number;
};

class b : public a
{
    public:
        b(int);
        virtual ~b();
};

class c : public b
{
    public:
        c(int);
        virtual ~c();
        virtual void print();
};

これらは cpp ファイルを表すヘッダーです。適切な cpp ファイルごとにすべてのメソッドを実装しました。私はこのコードを使用しましたが、うまく動作しますが、クラス b も印刷を実装する必要があるのではないかと思います (そのように: print(){})。それで、それを行う適切な方法は何ですか? 実装する(必要でなくても)かどうか?

4

2 に答える 2

1

オブジェクト指向プログラミングにおける継承の要点は、書き換える必要のないメソッドのスーパークラス実装に依存できることです。

于 2013-01-03T00:34:02.127 に答える
0

サブクラスによってオーバーロードされる関数のみを記述する必要があります。サブクラスが特定の動作を特殊化していない場合、サブクラスに親関数のコピーを記述することはお勧めできません。これは無駄が多く、混乱を招く可能性があるだけでなく、後でエラーが発生する可能性もあります。

親クラスを Monkey と呼び、サブクラスを Tarzan と呼びます。Monkey クラスでは、Swing() の関数を定義します。

さて、Tarzan は Monkey の派生物であり、Monkey のように木の中でスイングすることを学んだので、Swing 関数の Tarzan 独自のバージョンを記述する必要はありません。しかし、とにかく「完全」にするために書いたとしましょう。モンキーのスイング方法を変更する必要がある場合は、2 つのルーチンを更新する必要があります。1 つはモンキー クラス用で、もう 1 つはターザン用です。さらに悪いことに、サルがスイングする方法を変更し、ターザンで同じ変更を行うのを忘れた場合、ターザンはサルのようにスイングしなくなり、それは予期せぬことであり、おそらく間違っています.

結論: サブクラスが親に対して既に定義されているものからの特殊化を必要とするサブクラス関数にのみコードを記述します。

于 2013-01-03T00:53:27.310 に答える