ホームページ > バックエンド開発 > C++ > 実際の C++ 関数書き換え: サブクラス固有の関数を実装するためのトリック

実際の C++ 関数書き換え: サブクラス固有の関数を実装するためのトリック

WBOY
リリース: 2024-05-01 13:36:02
オリジナル
949 人が閲覧しました

関数の書き換えにより、サブクラスが基本クラスと同じ名前の関数を再定義して、サブクラスに固有の関数を実装できるようになります。名前の検索と型の一致に基づいて、サブクラスが同じ名前の関数を定義すると、基本クラスの関数は書き換えられる。これにより、サブクラスがさまざまな実装を提供できるようになります。たとえば、この例の Circle クラスと Rectangle クラスは、Shape クラスの area() 関数をオーバーライドして、独自の面積を計算します。

C++ 函数重写实战:实现子类专属功能的妙招

C 関数の書き換え: サブクラス固有の関数の実装

関数の書き換えは、C の重要なメカニズムです。これにより、サブクラスは以下のことが可能になります。基本クラス内の同じ名前の関数の動作を再定義します。これは、サブクラスに固有の特定の機能を定義する場合に役立ちます。

原則

関数の書き換えは、名前検索と型一致ルールに基づいています。関数が呼び出されると、コンパイラはスコープ内で一致する名前を持つ関数を検索します。複数のオーバーロードされた関数が見つかった場合は、最適一致の原則が選択に使用されます。

サブクラスが基本クラスと同じ名前の関数を定義している場合、サブクラスの関数は基本クラスの関数をオーバーライドします。これにより、サブクラスが基本クラスとは異なる実装を提供できるようになります。

実践的なケース

一般的な形状を表す Shape 基本クラスがあるシナリオを考えてみましょう。派生クラス CircleRectangle は、それぞれ円と四角形を表します。これらの形状の面積を計算する必要があります。

基本クラス Shape

class Shape {
public:
    virtual double area() const = 0;  // 纯虚函数
};
ログイン後にコピー

派生クラス Circle

class Circle : public Shape {
public:
    Circle(double radius) : radius(radius) {}

    double area() const override {
        return M_PI * radius * radius;
    }

private:
    double radius;
};
ログイン後にコピー

派生クラス Rectangle

class Rectangle : public Shape {
public:
    Rectangle(double width, double height)
        : width(width), height(height) {}

    double area() const override {
        return width * height;
    }

private:
    double width, height;
};
ログイン後にコピー

Using

これらのクラスを使用して、さまざまな形状の面積を計算できます。

int main() {
    Circle circle(5.0);
    Rectangle rectangle(3.0, 4.0);

    std::cout << "Area of circle: " << circle.area() << std::endl;
    std::cout << "Area of rectangle: " << rectangle.area() << std::endl;

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

出力:

Area of circle: 78.5398
Area of rectangle: 12.0
ログイン後にコピー

この例では、たとえば、Circle クラスと Rectangle クラスは、Shape クラスで定義された area() 関数をオーバーライドします。これにより、各形状に固有の面積計算ロジックを実装できるようになります。

以上が実際の C++ 関数書き換え: サブクラス固有の関数を実装するためのトリックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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