Home > Backend Development > C++ > body text

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

PHPz
Release: 2024-04-30 13:24:01
Original
1130 people have browsed it

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:

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

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<派生类*>(基类对象);
Copy after login

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;
};
Copy after login

Square.h

class Square : public Shape {
public:
    explicit Square(double width);
    double getArea() const override;
    double getWidth() const;
private:
    double width;
};
Copy after login

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;
}
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template