C 仮想関数はポリモーフィズムを実現するための鍵であり、派生クラスが親クラスの動作をオーバーライドできるようにします。つまり、仮想関数として宣言され、派生クラスに表示されます。呼び出されると、コンパイラはオブジェクト タイプに基づいて正しい関数バージョンを動的に解決します。純粋仮想関数は、ポリモーフィズムを実現するために、派生クラスに独自の実装を提供することを強制します。派生クラスは、基本クラスの仮想関数をオーバーライドして、さまざまな動作を実装します。
#C 仮想関数の詳しい説明: ポリモーフィック機構の謎を解く
はじめに
ポリモーフィズム プロパティはオブジェクト指向プログラミングの基礎であり、同じ親クラスを持つオブジェクトを異なる方法で処理できるようにします。 C のポリモーフィズムは主に仮想関数を通じて実現されます。この記事では、仮想関数を詳しく掘り下げ、ポリモーフィックなメカニズムをわかりやすく説明します。
#仮想関数の本質仮想関数は、仮想関数として宣言され、派生クラスのオブジェクトに現れる特別なタイプのメンバー関数です。仮想関数が呼び出されると、コンパイラは、オブジェクトの実際の型に基づいて、実行時に正しい関数バージョンを動的に解決します。この機能により、派生クラスが親クラスの動作をオーバーライドできるようになり、ポリモーフィズムが実現します。
構文仮想関数の宣言構文は次のとおりです。
virtual 返回值类型 函数名(参数列表);
class Shape { public: virtual double面积() const = 0; // 纯虚函数 };
純粋な仮想関数純粋仮想関数は、関数本体を持たない特殊な仮想関数であり、派生クラスで実装する必要があります。これにより、派生クラスに独自の実装を提供することが強制され、ポリモーフィズムが強制されます。
ケース実際の仮想関数を示すために、形状抽象クラス
Shape とその 2 つの派生クラス
Circle と
Rectangle:
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 サイトの他の関連記事を参照してください。