オーバーロードと上書きは、C では異なる概念です。オーバーロードを使用すると、異なるパラメーター リストを使用して同じ名前の関数を作成できます。一方、オーバーライドを使用すると、派生クラス関数が同じ名前の基本クラス関数をオーバーライドできます。オーバーロードでは、関数名は同じですがパラメーター リストが異なります。オーバーライドでは、関数名とパラメーター リストが同じである必要があり、派生クラス関数は override キーワードを使用する必要があります。
C 関数のオーバーロードと上書き
オーバーロードと上書き
オーバーロードと上書きオーバーライドは、C における 2 つの異なる概念です。オーバーロードを使用すると、同じ名前でパラメーター リストが異なる関数を作成できます。一方、オーバーライドを使用すると、派生クラスの関数が基本クラスの同じ名前の関数をオーバーライドできます。
オーバーロード
さまざまな入力パラメータに基づいてさまざまな形状の面積を計算する area
という名前の関数があるとします。
int area(int length, int width); // 矩形面积 double area(double radius); // 圆形面积
これらの関数は異なるパラメーター リストを持っているため、area
名でオーバーロードされます。さまざまな種類のデータを処理し、さまざまな計算を実行できます。
オーバーライド
次に、area
仮想関数を持つ基本クラス Shape
があると仮定します。
class Shape { public: virtual double area() const = 0; };
派生クラス Rectangle
および Circle
を作成し、area
関数をオーバーライドできます。
class Rectangle : public Shape { public: double area() const override { return length * width; } int length, width; // 矩形属性 }; class Circle : public Shape { public: double area() const override { return Math.PI * radius * radius; } double radius; // 圆形属性 };
派生クラスでは、次のようにします。 override
キーワードを使用して、親クラスの area
関数を明示的にオーバーライドします。オーバーライドされる関数は、親関数と同じ戻り値の型と名前を持つ必要があります。
実践的なケース
オーバーロードと上書きを示すプログラムを作成します:
#include <iostream> #include <cmath> using namespace std; class Shape { public: virtual double area() const = 0; }; class Rectangle : public Shape { public: double area() const override { return length * width; } int length, width; }; class Circle : public Shape { public: double area() const override { return Math.PI * radius * radius; } double radius; }; int main() { // 创建矩形对象 Rectangle rectangle; rectangle.length = 5; rectangle.width = 3; // 创建圆形对象 Circle circle; circle.radius = 2; // 计算并输出矩形和圆形的面积 cout << "矩形面积:" << rectangle.area() << endl; cout << "圆形面积:" << circle.area() << endl; }
出力結果:
矩形面积:15 圆形面积:12.566370614359172
この例は次のことを示していますオーバーロードとオーバーライドを通じて、さまざまな機能を持つ関数を作成する方法。
以上がC++ 関数のオーバーロードとオーバーライドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。