ホームページ  >  記事  >  バックエンド開発  >  C++ 仮想関数と抽象基本クラス: ポリモーフィック プログラミングの基礎を探る

C++ 仮想関数と抽象基本クラス: ポリモーフィック プログラミングの基礎を探る

WBOY
WBOYオリジナル
2024-04-28 11:30:02354ブラウズ

C では、ポリモーフィズムは仮想関数と抽象基本クラスによって実現されます。仮想関数を使用すると、基本クラスの関数を派生クラスでオーバーライドできますが、抽象基本クラスには純粋な仮想関数が含まれるため、派生クラスに実装が強制されます。これにより、基本クラス ポインターを使用して派生クラス オブジェクトにアクセスし、オブジェクトの実際の型に基づいて適切なメソッドを呼び出すことにより、ポリモーフィック プログラミングが可能になります。

C++ 虚拟函数与抽象基类:探究多态编程的基础

C 仮想関数と抽象基本クラス: ポリモーフィック プログラミングの基礎

概要

ポリモーフィズムはオブジェクト指向プログラミング (OOP) です。 ) ) を使用すると、オブジェクトが同じメッセージにさまざまな方法で応答できるようになります。 C では、仮想関数と抽象基本クラスを使用してポリモーフィズムを実現します。

仮想関数

定義: 仮想関数は、基本クラスで宣言され、派生クラスでのみ実装されるメンバー関数です。仮想関数が基本クラス ポインターを通じて呼び出される場合、派生クラスの実装が呼び出されます。

構文:

class Base {
public:
    virtual void print() const;
};

class Derived : public Base {
public:
    virtual void print() const override;
};

override このキーワードは、基本クラスの仮想関数をオーバーライドしていることを示します。

抽象基本クラス

定義: 抽象基本クラスは、少なくとも 1 つの純粋仮想関数を含む基本クラスです。純粋な仮想関数は定義されておらず、派生クラスによってのみ実装されます。

構文:

class Base {
public:
    virtual void f() const = 0;
};

実際のケース: 形状クラス階層

各形状クラスに面積を計算する関数がある形状階層を考えてみましょう area() メソッド。

基本クラス Shape:

class Shape {
public:
    virtual double area() const = 0;
};

派生クラス Circle および Rectangle:

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

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

private:
    double _radius;
};

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;
};

Main 関数:

int main() {
    Shape* s1 = new Circle(5);
    Shape* s2 = new Rectangle(3, 4);

    std::cout << "Circle area: " << s1->area() << std::endl;
    std::cout << "Rectangle area: " << s2->area() << std::endl;

    return 0;
}

出力:

Circle area: 78.5398
Rectangle area: 12

利点

  • 派生クラス オブジェクトへのポリモーフィック アクセスを許可します
  • コードの再利用性と再利用性の向上 スケーラビリティ
  • コードの分離とメンテナンスをサポート

以上がC++ 仮想関数と抽象基本クラス: ポリモーフィック プログラミングの基礎を探るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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