C++ 运算符重载称为函数
C++ operator overloading called as function
我正在试验运算符重载,发现了一些我无法解释的东西:
WeekDays.h
using namespace std;
enum DAYS
{
MON,
TUE,
WED,
THU,
FRY,
SAT,
SUN
};
DAYS operator+(DAYS&a,DAYS &b)
{
printf("Binary+ called\n");
return (DAYS)(((unsigned int)a+(unsigned int)b)%7);
}
//Increment 3
DAYS operator+(DAYS&a)
{
printf("Unary+ called\n");
return (DAYS)(((unsigned int)a+3)%7);
}
ostream& operator<<(ostream&o, DAYS &a)
{
switch(a){
case MON: o<<"MON"; break;
case TUE: o<<"TUE"; break;
case WED: o<<"WED"; break;
case THU: o<<"THU"; break;
case FRY: o<<"FRY"; break;
case SAT: o<<"SAT"; break;
case SUN: o<<"SUN"; break;
}
return o;
};
Main.cpp
#include <iostream>
#include "WeekDays.h"
using namespace std;
void main()
{
DAYS a=MON; //=0
DAYS b=TUE; //=1
cout<< +a <<endl;
cout<< +b <<endl;
cout<< +(a,b) <<endl;
cout<< (a+b) <<endl;
cin.get();
}
输出是
Unary+ called
3
Unary+ called
4
Unary+ called
4
Binary+ called
1
为什么 +(a,b) 被计算为一元运算符 +b ?我没能解释清楚。
Link 到相关线程 Operator overloading 。
我正在使用 VisualStudio 2012。
使用 (a,b)
你碰巧调用了奇数 "comma" operator,它首先计算 a,然后计算 b,最后计算 returns b。
您可以将其拼写为 operator+(a,b)
来呼叫您的接线员。 (这里的逗号是参数的分隔符,不是逗号运算符)。
请看一下linkhttp://en.cppreference.com/w/cpp/language/operator_arithmetic
一元加号,又名 +a
T::operator+() const;
T operator+(const T &a);
加法,又名 a + b
T::operator+(const T2 &b) const;
T T operator+(const T &a, const T2 &b);
使用重载的 operator+(a,b) 你应该至少得到这个警告:
警告:逗号运算符的左操作数无效 [-Wunused-value]
我正在试验运算符重载,发现了一些我无法解释的东西:
WeekDays.h
using namespace std;
enum DAYS
{
MON,
TUE,
WED,
THU,
FRY,
SAT,
SUN
};
DAYS operator+(DAYS&a,DAYS &b)
{
printf("Binary+ called\n");
return (DAYS)(((unsigned int)a+(unsigned int)b)%7);
}
//Increment 3
DAYS operator+(DAYS&a)
{
printf("Unary+ called\n");
return (DAYS)(((unsigned int)a+3)%7);
}
ostream& operator<<(ostream&o, DAYS &a)
{
switch(a){
case MON: o<<"MON"; break;
case TUE: o<<"TUE"; break;
case WED: o<<"WED"; break;
case THU: o<<"THU"; break;
case FRY: o<<"FRY"; break;
case SAT: o<<"SAT"; break;
case SUN: o<<"SUN"; break;
}
return o;
};
Main.cpp
#include <iostream>
#include "WeekDays.h"
using namespace std;
void main()
{
DAYS a=MON; //=0
DAYS b=TUE; //=1
cout<< +a <<endl;
cout<< +b <<endl;
cout<< +(a,b) <<endl;
cout<< (a+b) <<endl;
cin.get();
}
输出是
Unary+ called
3
Unary+ called
4
Unary+ called
4
Binary+ called
1
为什么 +(a,b) 被计算为一元运算符 +b ?我没能解释清楚。
Link 到相关线程 Operator overloading 。 我正在使用 VisualStudio 2012。
使用 (a,b)
你碰巧调用了奇数 "comma" operator,它首先计算 a,然后计算 b,最后计算 returns b。
您可以将其拼写为 operator+(a,b)
来呼叫您的接线员。 (这里的逗号是参数的分隔符,不是逗号运算符)。
请看一下linkhttp://en.cppreference.com/w/cpp/language/operator_arithmetic
一元加号,又名 +a
T::operator+() const;
T operator+(const T &a);
加法,又名 a + b
T::operator+(const T2 &b) const;
T T operator+(const T &a, const T2 &b);
使用重载的 operator+(a,b) 你应该至少得到这个警告: 警告:逗号运算符的左操作数无效 [-Wunused-value]