ホームページ >バックエンド開発 >C++ >ポリモーフィズムは C++ の関数のオーバーロードとどのように相互作用しますか?

ポリモーフィズムは C++ の関数のオーバーロードとどのように相互作用しますか?

WBOY
WBOYオリジナル
2024-06-05 18:03:05615ブラウズ

ポリモーフィズムと関数のオーバーロードは相互作用します。基本クラスでオーバーロードされた関数を作成し、派生クラスでこれらの関数のバージョンを再定義します。親クラスのポインターまたは参照は、サブクラス オブジェクトを指し、オブジェクトの実際の型に応じてさまざまなメソッドを呼び出すことができます。サンプル コードでは、Shape 基本クラスは純粋仮想関数 area() を宣言し、派生クラス Rectangle と Circle はそれぞれの面積を計算するために area() メソッドを再定義します。

C++ 中多态性如何与函数重载相互作用?

C++ におけるポリモーフィズムと関数オーバーロードの相互作用

C++ では、関数オーバーロード を使用して、同じ関数名を使用して、異なるパラメーター リストを持つ関数の異なるバージョンを作成できます。

ポリモーフィズム を使用すると、サブクラス オブジェクトをその親クラスの型で扱うことができます。これにより、親クラスが子クラス オブジェクトへのポインターまたは参照を指すことができるようになり、オブジェクトの実際の型に応じてさまざまなメソッドを呼び出すことができるようになります。

ポリモーフィズムと関数のオーバーロードを併用すると、基本クラスでオーバーロードされた関数を作成し、派生クラスでこれらの関数のバージョンを再定義することができます。

サンプルコード:

class Shape {
public:
    virtual double area() = 0;  // 纯虚函数
};

class Rectangle : public Shape {
public:
    Rectangle(double length, double width) : _length(length), _width(width) {}
    double area() override { return _length * _width; }

private:
    double _length, _width;
};

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}
    double area() override { return 3.14 * _radius * _radius; }

private:
    double _radius;
};

int main() {
    Shape* shapes[] = {
        new Rectangle(4.5, 3.2),
        new Circle(2.5)
    };

    for (Shape* shape : shapes) {
        cout << shape->area() << endl;  // 调用正确的 area() 方法
    }

    return 0;
}

出力:

14.4
19.625

この例では、Shape 基本クラスは area() 純粋仮想関数を宣言します。派生クラス RectangleCircle は、面積を別の方法で計算するために area() メソッドを再定義します。 Shape 基类声明了一个 area() 纯虚函数。派生类 RectangleCircle 重新定义 area() 方法,以不同的方式计算其面积。

main() 函数创建一个 Shape 指针数组,并将派生类对象存储在其中。循环遍历数组并调用 area()

main() 関数は、Shape ポインターの配列を作成し、そこに派生クラス オブジェクトを格納します。配列をループし、area() メソッドを呼び出し、指定されたオブジェクトの実際の型に基づいて適切なメソッドを呼び出します。 🎜

以上がポリモーフィズムは C++ の関数のオーバーロードとどのように相互作用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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