You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:固定主函数下Uint类的类型转换与构造适配问题

问题解决方案

要让给定的主函数正常运行,你的Uint类需要补充以下关键实现:

必须修改/补充的点

  • const 修饰转换运算符:const Uint c是常量对象,无法调用非const的成员函数,因此转换运算符必须加上const限定符。
  • 支持整数赋值:b = 3需要重载赋值运算符,接受整数类型并更新内部的nb字符串。
  • 正确实现构造函数:const Uint c = 13需要构造函数能将整数转换为字符串存储,同时默认构造函数需要具体实现。
  • 转换运算符返回正确值:当前转换运算符固定返回123456789,需要改为解析内部nb字符串返回对应的uint64_t值。

修改后的完整Uint类代码

#include <string>
#include <iostream>
#include <cstdint>
#include <stdexcept>
#include <algorithm>

using namespace std;

class Uint {
private:
    string nb;

    // 辅助函数:将uint64_t转为字符串
    string uint64_to_string(uint64_t val) {
        if (val == 0) return "0";
        string str;
        while (val > 0) {
            str.push_back('0' + (val % 10));
            val /= 10;
        }
        reverse(str.begin(), str.end());
        return str;
    }

    // 辅助函数:将字符串转为uint64_t
    uint64_t string_to_uint64() const {
        uint64_t result = 0;
        for (char ch : nb) {
            if (ch < '0' || ch > '9') {
                throw invalid_argument("Invalid numeric string");
            }
            result = result * 10 + (ch - '0');
        }
        return result;
    }

public:
    // 默认构造函数:初始化值为0
    Uint() : nb("0") {}

    // 接受uint64_t的构造函数(兼容整数类型隐式转换)
    Uint(uint64_t a) : nb(uint64_to_string(a)) {}

    // 重载赋值运算符,支持整数赋值
    Uint& operator=(uint64_t val) {
        nb = uint64_to_string(val);
        return *this;
    }

    // const修饰的转换运算符,支持常量对象调用
    operator uint64_t() const {
        return string_to_uint64();
    }
};

代码说明

  1. 构造函数:默认构造函数初始化nb为"0",接受uint64_t的构造函数将整数转为字符串存储,同时兼容int等整数类型的隐式转换(比如13会自动转为uint64_t)。
  2. 赋值运算符:直接将传入的整数转为字符串,更新内部的nb成员,满足b = 3的赋值需求。
  3. const转换运算符:加上const后,常量对象c可以调用该运算符,同时通过辅助函数解析nb字符串,返回对应的uint64_t值,确保输出13而不是固定值。
  4. 辅助函数:封装了整数和字符串的互转逻辑,保证内部数据处理的正确性。

内容的提问来源于stack exchange,提问作者din

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:45:54