関数のオーバーロードでは、クラス内で同じ名前で異なるシグネチャを持つ関数を使用できますが、基本クラス内の同じシグネチャを持つ関数をオーバーライドするときに派生クラスで関数のオーバーライドが発生し、異なる動作が提供されます。
#関数のオーバーロードと C での書き換えの違い
##関数のオーバーロード#Functionオーバーロードを使用すると、シグネチャ (パラメーターの型と数) が異なる限り、同じクラス内で同じ名前の異なる関数を使用できます。
構文:
return_type function_name(parameter_types) { // 函数体 } // 另一个重载 return_type function_name(other_parameter_types) { // 另一个函数体 }
AreaCalculator
という名前のクラスを考えてみます。さまざまな形状の面積:class AreaCalculator { public: double Area(double radius) { return M_PI * radius * radius; } double Area(double length, double width) { return length * width; } double Area(int numOfSides, double sideLength) { // 正多边形的面积公式 // ... 省略后面代码 } };
ここでは、
Area 関数がオーバーロードされて、さまざまな数とタイプの引数を受け取り、形状タイプに基づいてさまざまな面積を計算できるようになります。 関数のオーバーライド
関数のオーバーライドは、派生クラスが同じシグネチャ (名前とパラメーターの型) を持つ基本クラスの関数をオーバーライドするときに発生します。派生クラスのオーバーライドされた関数は、多くの場合、基本クラスの関数とは異なる動作をします。
構文:
class DerivedClass : public BaseClass { public: // 重写基类中的函数 return_type function_name(parameter_types) { // 重写的函数体 } };
Shape
という名前の基本クラスを考えてみましょう。図形を描画するDraw 関数を定義します:
class Shape { public: virtual void Draw() { // 绘制通用形状 // ... 省略后面代码 } };
派生クラス
Circle は、特に円を描画するために Draw 関数をオーバーライドできます:
class Circle : public Shape { public: void Draw() override { // 绘制圆形 // ... 省略后面代码 } };
オーバーライドすると、
Circle クラスの Draw 関数は、
Shape クラスの
Draw 関数をオーバーライドし、より具体的な描画の実装。
以上がC++ で関数のオーバーロードと書き換えを区別する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。