>백엔드 개발 >C++ >C++ 함수 상속에 대한 자세한 설명: 업캐스팅과 다운캐스팅이란 무엇입니까?

C++ 함수 상속에 대한 자세한 설명: 업캐스팅과 다운캐스팅이란 무엇입니까?

PHPz
PHPz원래의
2024-04-30 13:24:011182검색

상속에서 상향 변환은 파생 클래스를 기본 클래스로 변환하고, 하향 변환은 기본 클래스를 파생 클래스로 변환합니다. 업캐스팅은 안전하며 정보가 손실될 수 있습니다. 다운캐스팅은 위험합니다. 해당 파생 클래스가 존재하는지 확인해야 합니다. 그렇지 않으면 nullptr이 반환됩니다.

C++ 函数继承详解:什么是向上转型和向下转型?

C++ 함수 상속의 업캐스팅 및 다운캐스팅

객체 지향 프로그래밍에서 상속은 클래스 계층 구조의 핵심 개념입니다. 클래스가 다른 클래스(기본 클래스)를 상속하는 경우 상속 클래스(파생 클래스)는 기본 클래스의 속성과 메서드를 상속합니다.

업캐스팅

업캐스팅은 파생 클래스 개체를 기본 클래스 개체에 대한 참조 또는 포인터로 변환하는 것을 의미합니다. 이 형식 변환은 파생 클래스 개체에 기본 클래스 개체의 모든 데이터와 메서드가 포함되어 있기 때문에 안전하지만 변환 후에는 파생 클래스의 고유한 메서드와 데이터에 액세스할 수 없으므로 정보가 손실될 수 있습니다.

구문: ​​

基类* 指针 = &派生类对象;

Downcasting

다운캐스팅은 기본 클래스 개체를 파생 클래스 개체에 대한 참조 또는 포인터로 변환하는 것을 의미합니다. 이 유형 변환은 잘못된 캐스트로 이어질 수 있으므로 위험합니다. 다운캐스팅은 파생 클래스 객체가 기본 클래스 객체에 실제로 존재하는 경우에만 작동합니다.

구문: ​​

派生类* 指针 = dynamic_cast<派生类*>(基类对象);

dynamic_cast 연산자는 런타임 유형 검사를 수행하여 캐스트가 안전한지 확인합니다. 형변환이 유효하지 않은 경우 dynamic_castnullptr를 반환합니다. 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 = &square;

    // 通过形状对象调用 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()

🎜실용 사례🎜🎜🎜 도형의 면적을 계산하는 getArea() 메서드가 있는 기본 클래스로 Shape 클래스가 있다고 가정해 보겠습니다. 파생 클래스 SquareShape 클래스를 상속하고 getWidth() 메서드를 추가하여 사각형의 너비를 가져옵니다. 🎜🎜🎜Shape.h🎜🎜rrreee🎜🎜Square.h🎜🎜rrreee🎜🎜main.cpp🎜🎜rrreee🎜이 예에서는 정사각형 개체를 만들고 이를 모양 개체로 업캐스트한 다음 getArea( ) 메소드. 그런 다음 모양 개체를 정사각형 개체로 다운캐스트하고 getWidth() 메서드를 호출합니다. 🎜

위 내용은 C++ 함수 상속에 대한 자세한 설명: 업캐스팅과 다운캐스팅이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.