求助:固定主函数下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(); } };
代码说明
- 构造函数:默认构造函数初始化
nb为"0",接受uint64_t的构造函数将整数转为字符串存储,同时兼容int等整数类型的隐式转换(比如13会自动转为uint64_t)。 - 赋值运算符:直接将传入的整数转为字符串,更新内部的
nb成员,满足b = 3的赋值需求。 - const转换运算符:加上
const后,常量对象c可以调用该运算符,同时通过辅助函数解析nb字符串,返回对应的uint64_t值,确保输出13而不是固定值。 - 辅助函数:封装了整数和字符串的互转逻辑,保证内部数据处理的正确性。
内容的提问来源于stack exchange,提问作者din
相关产品推荐
相关产品推荐

