-2

我只是在玩 + 运算符,我无法弄清楚如何声明它并“明确”使用它,请帮助代码如下:

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

4 回答 4

2

您不能制作(这些)运算符explicit(只有转换运算符可以在 C++11 中显式)。你不需要。只需通过以下方式避免显式转换为您的类型:

  • 没有为其他类型定义转换运算符,并且..
  • 标记可以用一个参数调用的所有复杂构造函数explicit

这样,您可以有效地只调用operator+已经是complex.

于 2013-03-11T17:38:11.110 回答
1

显式关键字仅对具有一个参数的构造函数有用。它将阻止编译器使用该构造函数进行转换。我不知道您要通过明确 + 运算符来完成什么。:)

于 2013-03-11T17:34:46.590 回答
0

如果您想要一个explicit转换函数,您将不得不为此目的编写一个(请参阅此处)(但它只适用于一个参数)。

至于你的operator+(...),只需删除explicit它就可以了。

Compex c1(1,2);
Compex c2(3,12);
Compex c3 = c1 + c2;
于 2013-03-11T17:43:26.850 回答
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
    }
};
于 2013-03-11T17:53:18.353 回答