我只是在玩+操作员&我无法弄清楚如何声明并“明确”使用它 请帮助代码如下:
class compex{
int real;
int img;
public:
compex();
compex(int,int);
compex& explicit operator + (const compex& P1)
friend ostream& operator <<(ostream& out,const compex& R);
};
并且运营商的实施是:
compex& compex :: operator + (const compex& P1)
{
this->real += P1.real;
this->img += P1.img;
return *this;
}
答案 0 :(得分:2)
你不能使(这些)运算符explicit
(在C ++ 11中只能转换运算符)。你不需要。只需通过以下方式避免对您的类型进行显式转换:
explicit
调用的所有复合构造函数。这样,您只能使用已经operator+
的类型有效地调用complex
。
答案 1 :(得分:1)
explicit关键字仅对具有一个参数的构造函数有用。它将阻止编译器使用该构造函数进行转换。通过让你的+运算符显式,我不知道你想要完成什么。 :)
答案 2 :(得分:0)
如果你想要一个explicit
转换函数,你必须为此目的编写一个(参见here)(但它只适用于一个参数)。
至于您的operator+(...)
,只需删除explicit
即可。
Compex c1(1,2);
Compex c2(3,12);
Compex c3 = c1 + c2;
答案 3 :(得分:0)
如果您想在使用compex
时阻止类型隐式转换为operator +
,您可以利用模板参数。
模板参数不直接受类型转换规则的约束。
class compex{
template<class C,
typename std::enable_if<std::is_same<C,complex>::value>::type >
compex& operator + (const C& P1)
{
// Your code
}
};