ホームページ  >  記事  >  バックエンド開発  >  C++ 関数の書き換え: 親クラスの欠陥をカバーし、コード構造を最適化する

C++ 関数の書き換え: 親クラスの欠陥をカバーし、コード構造を最適化する

王林
王林オリジナル
2024-05-02 10:06:011051ブラウズ

関数の書き換えにより、サブクラスが親クラスの関数をオーバーライドできるようになり、それによって親クラスの欠陥が解決され、コード構造が最適化されます。具体的な手順は次のとおりです。サブクラスは、親クラスと同じ名前とシグネチャを使用して関数を書き換え、独自の実装を提供します。サブクラスは、親クラスの設計上の欠陥やエラーを修正できます。関数を書き直すと、コードの保守性と可読性が向上します。

C++ 函数重写:覆盖父类缺陷,优化代码结构

#C 関数の書き換え: 親クラスの欠陥をカバーし、コード構造を最適化する

関数の書き換えallowed サブクラスは、親クラスと同じ名前とシグネチャを持つ関数を再実装します。これには、次の利点があります。

  • 親クラスの欠陥をカバーする: サブクラスは、親クラスの設計上の欠陥やエラーを修正できます。
  • コード構造の最適化: 関数を書き直すと、コードの保守性と可読性が向上します。

構文

サブクラスで親クラス関数をオーバーライドするための構文は次のとおりです。

returnType ChildClass::functionName(argumentList) {
  // 重写后的函数体
}

その中には次のとおりです。

  • returnType: 関数の戻り値の型をオーバーライドします。
  • ChildClass: 派生クラス名。
  • functionName: 書き換える関数の名前。
  • argumentList: 関数のパラメータリストを書き換えます。

実際的なケース: ジオメトリ基本クラス

形状面積を計算するための

area 仮想関数を定義するジオメトリ基本クラスを考えてみましょう。

class Shape {
public:
  virtual double area() const = 0;
};

それぞれ正方形と円の派生クラス

SquareCircle を作成します。

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;
};

演算子を書き直すと、より単純で明確な構文を使用してベクトルを操作できるようになります: <pre class='brush:cpp;toolbar:false;'>Vector v; v += 10; // 相当于 v.add(10) v -= 5; // 相当于 v.subtract(5)</pre>

結論

関数の書き換えは、サブクラスが親クラスの欠陥をカバーし、コード構造を最適化できるようにする C の強力なメカニズムです。オーバーライドされる関数の設計と実装を慎重に検討することで、プログラムの堅牢性、可読性、保守性を向上させることができます。

以上がC++ 関数の書き換え: 親クラスの欠陥をカバーし、コード構造を最適化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。