如何正确地为任何类型生成前缀和后缀运算符?
例如,我有一个枚举类:
enum class Traffic_light { green, yellow, red };
我尝试创建操作符重载,如:
Traffic_light operator++(int)
{
return Traffic_light::green;
}
Traffic_light operator++()
{
return Traffic_light::red;
}
但这不起作用。
Traffic_light tl = Traffic_light::green;
++tl; // Error
tl++; // Error
错误:“operator”不匹配
一般来说,如何重载运算符?
我想看看任何类型的通用指南。
你可以这样做
enum class Traffic_light { green, yellow, red };
Traffic_light& operator++(Traffic_light& t)
{
if(t == Traffic_light::red)
t = Traffic_light::green;
else
t = static_cast<Traffic_light>(static_cast<int>(t) + 1);
return t;
}
Traffic_light operator++(Traffic_light& t, int)
{
auto temp{t};
++t;
return temp;
}
我将其实现为循环。您可以阅读下面的链接以获取有关运算符重载的总体信息。例如,哪些操作符不能重载,等等。
运算符重载
由于需要使操作符成为非成员函数,因此需要将参数传递给操作符:
Traffic_light operator++(Traffic_light const&, int)
{
return Traffic_light::green;
}
Traffic_light operator++(Traffic_light const&)
{
return Traffic_light::red;
}
请注意,这些是返回的临时变量,而不是对特定Traffic_light
对象的引用,这通常不是这些运算符的实现方式。
这是一个演示。
主要内容:运算符重载的实现,可重载与不可重载的运算符C# 中支持运算符重载,所谓运算符重载就是我们可以使用自定义类型来重新定义 C# 中大多数运算符的功能。运算符重载需要通过 operator 关键字后跟运算符的形式来定义的,我们可以将被重新定义的运算符看作是具有特殊名称的函数,与其他函数一样,该函数也有返回值类型和参数列表,如下例所示: public static Box operator+ (Box b, Box c) { Box bo
本文向大家介绍c++ *运算符重载,包括了c++ *运算符重载的使用技巧和注意事项,需要的朋友参考一下 运算符重载,对象和指向对象的指针 直接上code 运行结果: t是指向test对象的指针,(*t) 也就是一个test对象。 所以只有 *t才真正的调用了 运算符的重载函数。
我试图重载结构中映射的运算符<<,但得到一个编译错误: 不存在从“std::_rb_tree_const_iterator >”到“std::_rb_tree_iterator >”的合适的用户定义转换
对于一个作业,学生们必须制作一个卡片结构来保存卡片的花色、等级和位图。此结构需要一个重载的" 然而,操作员 事先非常感谢。
你好,Stack,我现在正想写一个RPN转换器,我是C新手。但是我遇到了问题。希望我能详细解释这些问题。我使用数组来堆叠运算符。当我开始讨论以下问题时,让我们使用示例“5 8”: 出于某种原因,它会将运算符推到堆栈上,但不会将运算符添加到后缀字符串变量中,因为我也在添加我的元素。我看了一下我的pop函数,这似乎是正确的,但我很困惑。如果你能把我引向正确的方向那就太好了。 这是我的完整代码: 另外,
在《 到底什么时候会调用拷贝构造函数?》一节中,我们讲解了初始化和赋值的区别:在定义的同时进行赋值叫做 初始化(Initialization),定义完成以后再赋值(不管在定义的时候有没有赋值)就叫做 赋值(Assignment)。初始化只能有一次,赋值可以有多次。 当以拷贝的方式初始化一个对象时,会调用拷贝构造函数;当给一个对象赋值时,会调用重载过的赋值运算符。 即使我们没有显式的重载赋值运算符,