我已经阅读了关于隐式和显式构造函数的stackoverflow的一些问题,但是我仍然无法区分隐式和显式构造函数。
我想知道是否有人可以给我一个好的定义和一些例子,或者可能指示我一本很好地解释这个概念的书/资源
答案 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<<"Real Part: "<<cx.real<<" Imag Part: "<<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);
会出错。