显式和隐式构造函数

这个问题在这里已经有了答案:

  • 显式关键字是什么意思? 11个答案

  • 以此为例:

    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); 会给出错误。

    链接地址: http://www.djcxy.com/p/24563.html

    上一篇: explicit & implicit constructors

    下一篇: Application of C++ Explicit Constructor