C++ 関数のオーバーロードと書き換えの違いは何ですか?

WBOY
リリース: 2024-04-13 18:06:01
オリジナル
874 人が閲覧しました

C 関数のオーバーロードと書き換え: オーバーロード: 同じ名前の関数に異なるパラメーターの型または番号があり、コンパイル時に適切なバージョンが選択されます。書き換え: 基本クラスと同じ名前を持つ派生クラス内の関数は、基本クラスの実装をオーバーライドし、派生クラスに特定の実装を提供します。オーバーロードの特性: コンパイル時にバインドされる、さまざまなパラメーターの型または数値。オーバーライド特性: 同じパラメータのタイプと数、実行時のバインディング、継承が必要です。

C++ 函数重载与重写有何区别?

#C 関数のオーバーロードと書き換え: 概念と相違点

オーバーロード

  • 定義: 関数名は同じですが、パラメーターの型または番号が異なる関数。
  • セマンティクス: コンパイラは、呼び出し時の引数の型または数値に基づいて、適切な関数バージョンを選択します。
  • 構文:
  • int sum(int a, int b);
    double sum(double a, double b);
    ログイン後にコピー

オーバーライド

  • 定義: 派生 A基本クラスと同じ名前とシグネチャを持つクラス内の関数。
  • セマンティクス: 派生クラスでオーバーライドされた関数は、基本クラスの同じ名前の関数をオーバーライドすることにより、派生クラスの特定の実装を提供します。
  • 文法:
  • class Base {
    public:
        virtual int add(int a, int b);
    };
    
    class Derived : public Base {
    public:
        int add(int a, int b) override;
    };
    ログイン後にコピー

違い

特徴オーバーロードオーバーライドアクセス レベルパブリックまたはプライベートパブリックまたは保護継承された #必須ではありません必須パラメータパラメータ 異なる型または数値同じパラメータの型と数値バインディングコンパイル時間実行時間スコープ同じクラス内基本クラスと派生クラス
#実際のケース

オーバーロード:

さまざまな型の数値の合計を計算します

#include <iostream>

using namespace std;

int sum(int a, int b) {
    return a + b;
}

double sum(double a, double b) {
    return a + b;
}

int main() {
    cout << "整数之和:" << sum(1, 2) << endl;
    cout << "浮点数之和:" << sum(1.5, 2.5) << endl;
    return 0;
}
ログイン後にコピー

オーバーライド:

多態性を使用してさまざまな形状の面積を計算します

#include <iostream>

using namespace std;

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;
    double 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(5, 10), new Circle(4)};

    for (int i = 0; i < 2; i++) {
        cout << "面积:" << shapes[i]->area() << endl;
    }

    return 0;
}
ログイン後にコピー

以上がC++ 関数のオーバーロードと書き換えの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート