関数の書き換えにより、サブクラスが親クラスの関数をオーバーライドできるようになり、それによって親クラスの欠陥が解決され、コード構造が最適化されます。具体的な手順は次のとおりです。サブクラスは、親クラスと同じ名前とシグネチャを使用して関数を書き換え、独自の実装を提供します。サブクラスは、親クラスの設計上の欠陥やエラーを修正できます。関数を書き直すと、コードの保守性と可読性が向上します。
#C 関数の書き換え: 親クラスの欠陥をカバーし、コード構造を最適化する
関数の書き換えallowed サブクラスは、親クラスと同じ名前とシグネチャを持つ関数を再実装します。これには、次の利点があります。
構文
サブクラスで親クラス関数をオーバーライドするための構文は次のとおりです。returnType ChildClass::functionName(argumentList) { // 重写后的函数体 }
: 関数の戻り値の型をオーバーライドします。
: 派生クラス名。
: 書き換える関数の名前。
: 関数のパラメータリストを書き換えます。
実際的なケース: ジオメトリ基本クラス
形状面積を計算するためのarea 仮想関数を定義するジオメトリ基本クラスを考えてみましょう。
class Shape { public: virtual double area() const = 0; };
Square と
Circle を作成します。
class Square : public Shape { public: Square(double sideLength) : sideLength(sideLength) {} double area() const override { return sideLength * sideLength; } private: double sideLength; }; class Circle : public Shape { public: Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } private: double radius; };
親クラス Defect ## をオーバーライドします。
#Shape基本クラスの area
関数は、具体的な実装がないため抽象関数です。サブクラスは独自の実装を提供する必要があります。ただし、Circle
のような円の場合、親クラスの area
関数は円周率を考慮していないため、間違っています。 Circle
area 関数をオーバーライドすることで、親クラスの欠陥をオーバーライドし、正しい面積計算を提供できます:
class Circle : public Shape { public: Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } private: double radius; };
コード構造を最適化します次のメソッドを使用して別の Vector
クラスを検討します:class Vector { public: void add(int x) { value += x; } void subtract(int x) { value -= x; } };
加算演算子
,## をオーバーライドすることでこれを行うことができます。 # このコードを再設計して、読みやすく保守しやすくします: class Vector { public: Vector& operator+=(int x) { value += x; return *this; } Vector& operator-=(int x) { value -= x; return *this; } private: int value; };
演算子を書き直すと、より単純で明確な構文を使用してベクトルを操作できるようになります: Vector v;
v += 10; // 相当于 v.add(10)
v -= 5; // 相当于 v.subtract(5)
関数の書き換えは、サブクラスが親クラスの欠陥をカバーし、コード構造を最適化できるようにする C の強力なメカニズムです。オーバーライドされる関数の設計と実装を慎重に検討することで、プログラムの堅牢性、可読性、保守性を向上させることができます。
以上がC++ 関数の書き換え: 親クラスの欠陥をカバーし、コード構造を最適化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。