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

继承中,向上转型将派生类转换为基类,向下转型将基类转换为派生类。向上转型安全,信息可能丢失;向下转型危险,须确保存在对应派生类,否则返回 nullptr。

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

C++ 函数继承中的向上转型和向下转型

在面向对象编程中,继承是类层次结构的关键概念。当一个类继承了另一个类(基类)时,继承类(派生类)将继承基类的属性和方法。

向上转型

立即学习“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 = &square;    // 通过形状对象调用 getArea() 方法    double area = shape->getArea();    std::cout << "正方形的面积: " << area << std::endl;    // 将形状对象向下转型为正方形对象    Square* square2 = dynamic_cast(shape);    // 如果向下转型成功,则调用 getWidth() 方法    if (square2) {        double width = square2->getWidth();        std::cout << "正方形的宽度: " << width << std::endl;    } else {        std::cout << "向下转型失败" << std::endl;    }    return 0;}

在这个例子中,我们创建了一个正方形对象,将其向上转型为形状对象,并调用了 getArea() 方法。然后,我们向下转型形状对象为正方形对象,并调用 getWidth() 方法。

以上就是C++ 函数继承详解:什么是向上转型和向下转型?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1448846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 01:52:29
下一篇 2025年12月18日 01:52:43

相关推荐

发表回复

登录后才能评论
关注微信