明确的&隐式构造函数

时间:2015-08-14 08:57:10

标签: c++ constructor

我已经阅读了关于隐式和显式构造函数的stackoverflow的一些问题,但是我仍然无法区分隐式和显式构造函数。

我想知道是否有人可以给我一个好的定义和一些例子,或者可能指示我一本很好地解释这个概念的书/资源

1 个答案:

答案 0 :(得分:0)

以此为例:

class complexNumbers {
      double real, img;
    public:
      complexNumbers() : real(0), img(0) { }
      complexNumbers(const complexNumbers& c) { real = c.real; img = c.img; }
      complexNumbers( double r, double i = 0.0) { real = r; img = i; }
      friend void display(complexNumbers cx);
    };
    void display(complexNumbers cx){
      cout<<&quot;Real Part: &quot;<<cx.real<<&quot; Imag Part: &quot;<<cx.img<<endl;
    }
    int main() {
      complexNumbers one(1);
      display(one);
      display(300);   //This code compiles just fine and produces the ouput Real Part: 300 Imag Part: 0
      return 0;
    }

由于方法display期望类complexNumbers的对象/实例作为参数,当我们传递十进制值300时,隐式转换就地发生。

为了克服这种情况,我们必须强制编译器仅使用显式构造创建一个对象,如下所示:

 explicit complexNumbers( double r, double i = 0.0) { real = r; img = i; }  //By Using explicit keyword, we force the compiler to not to do any implicit conversion.

在您的班级中出现constructor之后,语句display(300);会出错。