ホームページ >バックエンド開発 >C++ >関数のオーバーロードと書き換えに関する C++ 言語の標準仕様

関数のオーバーロードと書き換えに関する C++ 言語の標準仕様

WBOY
WBOYオリジナル
2024-04-21 09:09:01889ブラウズ

関数のオーバーロードでは、同じスコープ内で同じ名前の関数を定義できますが、異なるパラメーター リストが必要です。関数の書き換えでは、派生クラスの基本クラスと同じ名前と同じパラメーター リストを持つ関数を定義できます。 override キーワード、return 型とパラメータのリストは基本クラス関数と同じです。オーバーロードの例: print(int)、print(double); 上書きの例: 派生クラスの foo() は、Base クラスの foo() をオーバーライドします。

C++ 语言标准对函数重载和重写的规范

#関数のオーバーロードと書き換えに関する C 言語の標準仕様

#関数のオーバーロード

オーバーロードを使用すると、複数の関数を同じスコープ内で同じ名前で定義できますが、それらのパラメーター リストは異なる必要があります。 C 言語標準では、関数のオーバーロードが次の仕様に従う必要があります。

    戻り値の型は同じである必要があります。
  • パラメータ リスト、つまりパラメータの数、タイプ、または順序は異なっていなければなりません。
  • const、volatile、および Reference 修飾子を使用して、オーバーロードされた関数を区別できます。

例:

void print(int x);
void print(double x);

関数のオーバーライド

オーバーライドを使用すると、派生クラスで関数を定義できます。クラス内の同じ名前とパラメータリストを持つ基本 A 関数と同じです。 C 言語標準では、次の仕様に従うように関数を書き換える必要があります。

    書き換えられた関数には、override キーワードが必要です。
  • 戻り値の型は、基本クラス関数と同じである必要があります。
  • パラメータ リストは、基本クラス関数とまったく同じである必要があります (型、順序、修飾子を含む)。
  • 派生クラス関数には、基本クラス関数よりも低いアクセス許可があってはなりません (つまり、protected は protected 関数または public 関数のみをオーバーライドできます)。
#例:

class Base {
public:
    virtual void foo();
};

class Derived : public Base {
public:
    override void foo() override;  // 重写基类中的 foo
};

実用的なケース

関数のオーバーロード:

#include <iostream>

using namespace std;

void print(int x) {
    cout << "int: " << x << endl;
}

void print(double x) {
    cout << "double: " << x << endl;
}

int main() {
    print(10);  // 调用 int 版本的 print
    print(3.14); // 调用 double 版本的 print
    return 0;
}

関数の書き換え:

#include <iostream>

using namespace std;

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

class Rectangle : public Shape {
public:
    void draw() override {
        cout << "Drawing a rectangle" << endl;
    }
};

int main() {
    Rectangle r;
    r.draw(); // 调用 Rectangle 类中的重写函数
    return 0;
}

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

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