継承では、上向き変換は派生クラスを基本クラスに変換し、下向き変換は基本クラスを派生クラスに変換します。アップキャストは安全ですが、ダウンキャストは危険です。対応する派生クラスが存在することを確認する必要があります。存在しない場合は nullptr が返されます。
#C 関数継承におけるアップキャストとダウンキャスト
オブジェクト指向プログラミングでは、継承はクラス階層の重要な概念です。クラスが別のクラス(基底クラス)を継承すると、継承したクラス(派生クラス)は基底クラスのプロパティとメソッドを継承します。アップキャスト
アップキャストとは、派生クラス オブジェクトを基本クラス オブジェクトへの参照またはポインターに変換することを指します。派生クラス オブジェクトには基本クラス オブジェクトのすべてのデータとメソッドが含まれているため、この型変換は安全ですが、変換後は派生クラスの一意のメソッドとデータにアクセスできなくなるため、情報が失われる可能性があります。構文:
基类* 指针 = &派生类对象;
ダウンキャスト
ダウンキャストとは、基本クラスのオブジェクトを派生クラスのオブジェクト参照またはポインターに変換することを指します。 。この型変換は無効なキャストにつながる可能性があるため危険です。ダウンキャストは、派生クラス オブジェクトが実際に基本クラス オブジェクトに存在する場合にのみ機能します。構文:
派生类* 指针 = dynamic_cast<派生类*>(基类对象);
dynamic_cast オペレーターは実行時の型チェックを実行して、キャストが安全であることを確認します。キャストが無効な場合、
dynamic_cast は
nullptr を返します。
実際的なケース
基本クラスとしてShape クラスがあり、そのクラスに
getArea() メソッドがあるとします。図形の面積を計算します。派生クラス
Square は
Shape クラスを継承し、正方形の幅を取得する
getWidth() メソッドを追加します。
Shape.h
class Shape { public: virtual double getArea() const = 0; };
Square.h
class Square : public Shape { public: explicit Square(double width); double getArea() const override; double getWidth() const; private: double width; };
main.cpp
#include "Shape.h" #include "Square.h" int main() { // 创建一个正方形对象 Square square(5.0); // 将正方形对象向上转型为形状对象 Shape* shape = □ // 通过形状对象调用 getArea() 方法 double area = shape->getArea(); std::cout << "正方形的面积: " << area << std::endl; // 将形状对象向下转型为正方形对象 Square* square2 = dynamic_cast<Square*>(shape); // 如果向下转型成功,则调用 getWidth() 方法 if (square2) { double width = square2->getWidth(); std::cout << "正方形的宽度: " << width << std::endl; } else { std::cout << "向下转型失败" << std::endl; } return 0; }この例では、正方形のオブジェクトを作成し、それを形状オブジェクトにアップキャストし、
getArea() メソッドを呼び出します。次に、シェイプ オブジェクトを正方形のオブジェクトにダウンキャストし、
getWidth() メソッドを呼び出します。
以上がC++ 関数の継承の詳しい説明: アップキャストとダウンキャストとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。