C++ 转换构造函数

在 C++ 中如果一个构造函数只有一个参数,那么这个构造函数就是转换构造函数(Converting Constructor),这个构造函数可以将参数类型转换成构造函数所在的类对应的类型。

举个例子,假设有如下类 Complex:

 1 class Complex {
 2 private:
 3     int i;
 4     int j;
 5 
 6 public:
 7    // 1. 普通构造函数
 8     Complex(int i, int j) {
 9         this->i = i;
10         this->j = j;
11     }
12 
13     // 2. 转换构造函数
14     Complex(int i) {
15         this->i = i;
16         this->j = 0;
17     }
18 };

上面代码注释2处就定义了一个转换构造函数,它可以将一个整数类型,转换成一个 Complex 类型。

假如有下面的调用:

// 此时会调用转换构造函数 Complex(5)
Complex c = 5;

那么转换构造函数就会被调用,将整数5转换成 Complex 类型,实际上等价于:

Complex c= Complex(5);

禁用隐式类型转换

上面的转换是编译器自动转换,称为隐式类型转换。如果不需要这种隐式类型转换,只需要在转换构造函数前面添加 explicit 关键字,如下所示:

 // 2. 转换构造函数
explicit Complex(int i) {
         this->i = i;
         this->j = 0;
     }

假如 explicit 之后,如果还进行如下调用编译器就会报错:

Complex c = 5; // 此时会报错

如果需要,仍然可以手动进行调用:

Complex c = Complex(5);

 

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...