ホームページ >バックエンド開発 >C++ >C++ 仮想関数と継承: ポリモーフィック継承の謎を理解する

C++ 仮想関数と継承: ポリモーフィック継承の謎を理解する

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

仮想関数と継承は、オブジェクト指向プログラミングにおけるポリモーフィズムを実装します。仮想関数を宣言すると、派生クラスが基本クラスのメソッドをオーバーライドし、オブジェクトの実行時の型に基づいてメソッドを呼び出すことができます。継承によりクラス階層が確立され、派生クラスは基本クラスのデータとメソッドにアクセスして拡張できます。ポリモーフィック継承により、派生クラスが複数の基本クラスから継承できるようになり、ほとんどの派生オブジェクトはすべての基本クラスの仮想関数を使用できます。仮想関数が呼び出される順序は、クラスが宣言された順序によって異なります。

C++ 虚拟函数与继承:理解多态继承中的奥秘

#C 仮想関数と継承: ポリモーフィック継承の謎を理解する

概要

オブジェクト指向プログラミングにおける仮想関数と継承ポリモーフィズムの重要な要素です。仮想関数を使用すると、派生クラスが基本クラスのメソッドをオーバーライドし、実行時に正しい実装を呼び出すことができます。継承によりクラス間の階層関係が確立され、派生クラスが基本クラスのデータとメソッドにアクセスして拡張できるようになります。この記事では、C における仮想関数と継承のメカニズムを詳しく掘り下げ、実際のケースを通じて説明します。

仮想関数

仮想関数は、

virtual として宣言されるメンバー関数です。仮想関数が派生クラスから呼び出される場合、オブジェクトの実際のランタイム型に基づいて関数の正しい実装が呼び出されます。

仮想関数の宣言:

class Base {
public:
    virtual void display() {
        cout << "Base class display" << endl;
    }
};

派生クラスでの仮想関数のオーバーライド:

class Derived : public Base {
public:
    virtual void display() { // 重写 display 方法
        cout << "Derived class display" << endl;
    }
};

Inheritance

継承により、派生クラスは基本クラスからデータとメソッドを継承できます。

継承構文:

class Derived : public Base {
    // 派生类声明
};

派生クラスは、仮想関数を含む、基本クラス内のすべての非プライベート メンバーにアクセスして使用できます。また、派生クラスの基本クラスの仮想関数をオーバーライドすることもできます。

ポリモーフィック継承

ポリモーフィック継承: 派生クラスが複数の基本クラスから継承する場合。

ポリモーフィック継承では、ほとんどの派生クラス オブジェクトは、基本クラスのすべての仮想関数にアクセスして使用できます。複数の継承階層にわたる呼び出しの順序は、クラスの宣言順序によって異なります。

実際のケース:

多態性継承の使用を示す次のコードを考えてみましょう:

#include <iostream>

using namespace std;

class Shape {
public:
    virtual void draw() {
        cout << "Drawing shape" << endl;
    }
};

class Circle : public Shape {
public:
    virtual void draw() {
        cout << "Drawing circle" << endl;
    }
};

class Square : public Shape {
public:
    virtual void draw() {
        cout << "Drawing square" << endl;
    }
};

int main() {
    Shape* shapes[] = { new Circle(), new Square() };

    for (Shape* shape : shapes) {
        shape->draw();
    }

    return 0;
}

出力:

Drawing circle
Drawing square

この例では、

Circle クラスと Square クラスは、基本クラス Shape から draw 仮想関数を継承します。 draw 関数が呼び出されると、実際のオブジェクトのタイプに基づいて適切な実装が呼び出されます。これは、ポリモーフィック継承により、派生クラスが基本クラスから継承された仮想関数をオーバーライドし、実行時に正しいオブジェクト固有の実装を提供できるようにする方法を示しています。

以上がC++ 仮想関数と継承: ポリモーフィック継承の謎を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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