C ++中的显式运算符+

时间:2013-03-11 17:29:15

标签: c++ operator-overloading

我只是在玩+操作员&我无法弄清楚如何声明并“明确”使用它 请帮助代码如下:

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;
 }

4 个答案:

答案 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
    }
};