2301_81354056 2024-09-15 12:48 采纳率: 69.2%
浏览 1

为啥不同类型之间能赋值

img


构造函数那一行*this不是结构体数据类型吗?num不是longlong类型吗?

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-15 12:49
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在C++中,不同类型之间的赋值之所以能够进行,是因为语言提供了隐式转换或显式转换的机制。下面针对你提供的代码片段进行详细解释:

    1. 关于类型之间的赋值

      • 在C++中,当你尝试将一个类型的值赋给另一个类型的变量时,会发生类型转换。这可以是隐式的(自动的)或显式的(需要程序员明确指示)。
      • 在你给出的代码中,BigInteger类有一个构造函数,它接受一个long long类型的参数,并且还有一个赋值运算符,也接受long long类型的参数。这意味着你可以将一个long long类型的值赋给一个BigInteger类型的对象。这是通过构造函数的隐式转换实现的。
    2. 关于构造函数中的*this = num;

      • *this是指向当前对象的指针,表示对象的自身。在这里,它是BigInteger对象的一个实例。
      • = num;是调用该类的赋值运算符来执行赋值操作。这个赋值运算符在类中定义了一个函数,用于处理如何将一个long long类型的数值赋给BigInteger对象。这里涉及到用户自定义的赋值运算符重载。
    3. 关于类型与赋值的具体实现

      • 在赋值运算符的实现中,首先将s向量清空,然后通过循环将传入的long long类型的数值按照指定的基数(在这里是BASE = 100000000)进行分解,并将每一位存储在向量s中。这样,一个高精度的整数就被存储在了向量中。最后返回当前对象(即*this)。

    关于你提到的“num不是longlong类型吗?”的问题,从提供的代码来看,“num”是一个变量名,其类型由上下文决定。在构造函数和赋值运算符中,“num”被声明为“long long”类型。因此,在这些上下文中,“num”确实是“long long”类型。

    总的来说,你提供的代码展示了如何在C++中使用结构体和自定义操作来实现大整数类的基本功能,包括构造和赋值操作。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月15日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境