関数の書き換えにより、サブクラスが基本クラスと同じ名前の関数を再定義して、サブクラスに固有の関数を実装できるようになります。名前の検索と型の一致に基づいて、サブクラスが同じ名前の関数を定義すると、基本クラスの関数は書き換えられる。これにより、サブクラスがさまざまな実装を提供できるようになります。たとえば、この例の Circle クラスと Rectangle クラスは、Shape クラスの area() 関数をオーバーライドして、独自の面積を計算します。
C 関数の書き換え: サブクラス固有の関数の実装
関数の書き換えは、C の重要なメカニズムです。これにより、サブクラスは以下のことが可能になります。基本クラス内の同じ名前の関数の動作を再定義します。これは、サブクラスに固有の特定の機能を定義する場合に役立ちます。
原則
関数の書き換えは、名前検索と型一致ルールに基づいています。関数が呼び出されると、コンパイラはスコープ内で一致する名前を持つ関数を検索します。複数のオーバーロードされた関数が見つかった場合は、最適一致の原則が選択に使用されます。
サブクラスが基本クラスと同じ名前の関数を定義している場合、サブクラスの関数は基本クラスの関数をオーバーライドします。これにより、サブクラスが基本クラスとは異なる実装を提供できるようになります。
実践的なケース
一般的な形状を表す Shape
基本クラスがあるシナリオを考えてみましょう。派生クラス Circle
と Rectangle
は、それぞれ円と四角形を表します。これらの形状の面積を計算する必要があります。
基本クラス Shape
class Shape { public: virtual double area() const = 0; // 纯虚函数 };
派生クラス Circle
class Circle : public Shape { public: Circle(double radius) : radius(radius) {} double area() const override { return M_PI * radius * radius; } private: double radius; };
派生クラス Rectangle
class Rectangle : public Shape { public: Rectangle(double width, double height) : width(width), height(height) {} double area() const override { return width * height; } private: double width, height; };
Using
これらのクラスを使用して、さまざまな形状の面積を計算できます。
int main() { Circle circle(5.0); Rectangle rectangle(3.0, 4.0); std::cout << "Area of circle: " << circle.area() << std::endl; std::cout << "Area of rectangle: " << rectangle.area() << std::endl; return 0; }
出力:
Area of circle: 78.5398 Area of rectangle: 12.0
この例では、たとえば、Circle
クラスと Rectangle
クラスは、Shape
クラスで定義された area()
関数をオーバーライドします。これにより、各形状に固有の面積計算ロジックを実装できるようになります。
以上が実際の C++ 関数書き換え: サブクラス固有の関数を実装するためのトリックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。