Home >Backend Development >C++ >Detailed explanation of C++ function inheritance: What are upcasting and downcasting?

Detailed explanation of C++ function inheritance: What are upcasting and downcasting?

PHPz
PHPzOriginal
2024-04-30 13:24:011179browse

In inheritance, upward transformation converts the derived class into the base class, and downward transformation converts the base class into the derived class. Upcasting is safe, information may be lost; downcasting is dangerous, you must ensure that the corresponding derived class exists, otherwise nullptr will be returned.

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

C Upcasting and Downcasting in Function Inheritance

In object-oriented programming, inheritance is a class hierarchy Key concepts. When a class inherits another class (base class), the inheriting class (derived class) inherits the properties and methods of the base class.

Upcasting

Upcasting refers to converting a derived class object into a reference or pointer to a base class object. This type conversion is safe because the derived class object contains all the data and methods of the base class object, but it may result in a loss of information because the unique methods and data of the derived class will not be accessible after the conversion.

Syntax:

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

Downcasting

Downcasting refers to converting a base class object into a derived class object reference or pointer. This type conversion is dangerous because it can lead to invalid casts. Downcasting only works if the derived class object actually exists in the base class object.

Syntax:

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

dynamic_cast The operator will perform runtime type checking to ensure that the cast is safe. If the cast is invalid, dynamic_cast will return nullptr.

Practical case

Suppose we have a Shape class as the base class, which has a getArea() method to Calculate the area of ​​a shape. The derived class Square inherits the Shape class and adds a getWidth() method to get the width of the square.

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;
}

In this example, we create a square object, upcast it to a shape object, and call the getArea() method. Then, we downcast the shape object to a square object and call the getWidth() method.

The above is the detailed content of Detailed explanation of C++ function inheritance: What are upcasting and downcasting?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn