C での関数のオーバーロードを使用すると、異なるパラメーターを持つ同じ名前の関数の異なる実装を定義できます。また、仮想関数により派生クラスの基本クラス関数をオーバーライドしてポリモーフィズムを実現できます。関数のオーバーロードと仮想関数は連携して動作できます。基本クラスで仮想オーバーロード関数を設計することで、派生クラスは特定のパラメーターの組み合わせのバージョンのみをオーバーロードできるため、実際のケースでは異なる型の距離を計算するなど、より柔軟な多態性が提供されます。原点からの形。
#C における関数のオーバーロードと仮想関数の連携
#はじめにC 言語は、ポリモーフィズムを実現するための 2 つのメカニズム、関数のオーバーロードと仮想関数を提供します。関数のオーバーロードを使用すると、名前は同じだがパラメーターの型に基づいて動作が異なる複数の関数を定義できます。仮想関数は、基本クラスの関数を派生クラスでオーバーライドできるようにすることで、継承におけるポリモーフィズムをサポートします。
関数のオーバーロード関数のオーバーロードを使用すると、名前は同じだがパラメーター リストが異なる複数の関数の異なる実装を定義できます。コンパイラは、呼び出されたときの引数の型に基づいて正しい関数を選択します。例:
int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; }
使用時:
int sum1 = add(1, 2); // 呼叫整數版本 double sum2 = add(1.5, 2.3); // 呼叫浮點版本仮想関数
仮想関数を使用すると、派生クラスが基本クラスの関数をオーバーライドできます。仮想関数が基本クラス ポインターを通じて呼び出される場合、派生クラスでオーバーライドされたバージョンが実行されます。例:
class Shape { public: virtual double getArea() const = 0; }; class Circle : public Shape { public: double getArea() const override { return 3.14 * radius * radius; } private: double radius; };
使用時:
Shape* shape = new Circle(5.0); double area = shape->getArea(); // 會呼叫 Circle::getArea()関数のオーバーロードと仮想関数のコラボレーション
関数のオーバーロードと仮想関数は連携して、より多くの機能を提供できます。柔軟なポリモーフィズム。基本クラスで仮想オーバーロード関数を設計することにより、派生クラスは特定のパラメーターの組み合わせを持つバージョンのみをオーバーロードできます。例:
class Shape { public: virtual double getArea(bool isFilled) const { return 0.0; } }; class Circle : public Shape { public: double getArea(bool isFilled) const override { if (isFilled) { return 3.14 * radius * radius; } else { return 0.0; } } };
使用する場合:
Shape* shape = new Circle(5.0); double filledArea = shape->getArea(true); // 呼叫 Circle::getArea(bool) double unfilledArea = shape->getArea(false); // 呼叫 Shape::getArea(bool)実用的なケース
次は、計算幾何学における関数のオーバーロードと仮想関数のコラボレーションの使用例です。実際のケース:
class Shape { public: virtual double distanceToOrigin() const = 0; }; class Point : public Shape { public: double distanceToOrigin() const override { return 0.0; } }; class Circle : public Shape { public: double distanceToOrigin() const override { return radius; } }; class Rectangle : public Shape { public: double distanceToOrigin() const override { return min(x, y); } }; int main() { Shape* shapes[] = {new Point(), new Circle(5.0), new Rectangle(3.0, 4.0)}; for (Shape* shape : shapes) { cout << "距離原點: " << shape->distanceToOrigin() << endl; } }
このコードは、関数のオーバーロードと仮想関数を使用して、さまざまな種類の形状の原点からの距離を計算する方法を示しています。
以上がC++ 関数のオーバーロードと仮想関数はどのように連携しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。