C++仮想関数徹底解説:ポリモーフィック機構の謎を解く

王林
リリース: 2024-04-29 08:57:01
オリジナル
401 人が閲覧しました

C 仮想関数はポリモーフィズムを実現するための鍵であり、派生クラスが親クラスの動作をオーバーライドできるようにします。つまり、仮想関数として宣言され、派生クラスに表示されます。呼び出されると、コンパイラはオブジェクト タイプに基づいて正しい関数バージョンを動的に解決します。純粋仮想関数は、ポリモーフィズムを実現するために、派生クラスに独自の実装を提供することを強制します。派生クラスは、基本クラスの仮想関数をオーバーライドして、さまざまな動作を実装します。

C++ 虚拟函数详解:解答多态机制之谜

#C 仮想関数の詳しい説明: ポリモーフィック機構の謎を解く

はじめに
ポリモーフィズム プロパティはオブジェクト指向プログラミングの基礎であり、同じ親クラスを持つオブジェクトを異なる方法で処理できるようにします。 C のポリモーフィズムは主に仮想関数を通じて実現されます。この記事では、仮想関数を詳しく掘り下げ、ポリモーフィックなメカニズムをわかりやすく説明します。

#仮想関数の本質仮想関数は、仮想関数として宣言され、派生クラスのオブジェクトに現れる特別なタイプのメンバー関数です。仮想関数が呼び出されると、コンパイラは、オブジェクトの実際の型に基づいて、実行時に正しい関数バージョンを動的に解決します。この機能により、派生クラスが親クラスの動作をオーバーライドできるようになり、ポリモーフィズムが実現します。

構文仮想関数の宣言構文は次のとおりです。

virtual 返回值类型 函数名(参数列表);
ログイン後にコピー

例:

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

純粋な仮想関数純粋仮想関数は、関数本体を持たない特殊な仮想関数であり、派生クラスで実装する必要があります。これにより、派生クラスに独自の実装を提供することが強制され、ポリモーフィズムが強制されます。

ケース実際の仮想関数を示すために、形状抽象クラス
Shape とその 2 つの派生クラス CircleRectangle:

class Shape {
public:
    virtual double面积() const = 0; // 纯虚函数
};

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}
    double面积() 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面积() const override { return _width * _height; }
private:
    double _width, _height;
};

int main() {
    Shape* circle = new Circle(5.0);
    Shape* rectangle = new Rectangle(10.0, 5.0);

    // 父类指针指向不同的派生类对象,但调用正确的面积函数版本
    double areaCircle = circle->面积();
    double areaRectangle = rectangle->面积();

    std::cout << "圆的面积:" << areaCircle << std::endl;
    std::cout << "矩形的面积:" << areaRectangle << std::endl;

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

この例では、

Shape クラスは純粋仮想関数 Area() を宣言します。派生クラス Circle および Rectangle はそれぞれこの関数をカバーし、それぞれの面積計算を実装します。 main 関数では、親クラス ポインターを介して派生クラス オブジェクトにアクセスし、area() 関数が呼び出されますが、実際の関数に基づいて正しいバージョンの関数が実行されます。オブジェクトのタイプ。

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

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