重载运算符=具有非类类型
overload operator= with non class types
很抱歉提出这个可能很愚蠢的问题。我想覆盖类变量的默认赋值函数/accesor(不过使用=
运算符,而不是通常的set/get
命名法。我希望得到一些指导。我发现的最接近我问题的资源是这个,它为我提供了50%的所需。
让我们假设我有这个类(这段代码不是我的实际需求,而是我所要求的一个更琐碎的例子)。
class IDCard {
int id;
int operator=(const int& n_id); // This works for copying
};
/*
* copy value of id out (no same value check)
*/
int& IDCard::operator=(const int& n_id) {
id = n_id;
return id;
}
给定IDCard my_id
,我可以这样做:my_id
=10,但我也想这样做:int I=my_id
。
为此,我是否能够重载IDCard类中的某些内容以返回=
运算符上的基元,或者这只适用于设置类对象?
我看不出在很多情况下这会有用,因为这会使代码更加模糊,但我正在转换一些覆盖了它们的赋值器和访问器的python代码,所以我想知道C++是否也有类似的功能。
您可以定义一个转换运算符来使int i = my_id
工作:
class IDCard {
int id;
public:
operator int() const { return id; }
};
然而,我强烈建议不要这样做,并建议使用普通的访问器方法:
class IDCard {
private:
int id_;
public:
int id() const { return id_; }
};
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- JS相等运算符(如===)是否可以使用embind类型
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 将所有模板类型传递给运算符,而不指定所有类型
- 标准库类型的赋值运算符的引用限定符
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 如何确保接受的C++模板类型使运算符重载?
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- C2679 二进制"<<":未找到采用右操作数类型的运算符
- 使用类型id运算符的最佳替代方法
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 运算符'<'不能应用于类型 'string' 和 'string' 的操作数
- 为什么重载运算符可以返回其返回类型以外的其他内容?
- 表达式必须具有类类型(运算符)
- 使用许多类型运算符过载时,模棱两可的超载
- 类型转换为类型&&运算符
- 返回类型 ?:运算符和 C++ Primer 中的措辞
- 返回类型与返回类型(运算符++)不相同,也不协变