什么是C ++中的转换构造函数?它是为了什么?我听说C ++有一些叫做“转换构造函数”或“转换构造函数”的东西。这些是什么,它们的用途是什么?我在这段代码中看到了它:class MyClass{
public:
int a, b;
MyClass( int i ) {}}
int main(){
MyClass M = 1 ;}
3 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
使用转换构造函数隐式转换
让我们在问题中做出更复杂的例子
class MyClass{ public: int a, b; MyClass( int i ) {} MyClass( const char* n, int k = 0 ) {} MyClass( MyClass& obj ) {}}
前两个构造函数正在转换构造函数。第三个是复制构造函数,因此它是另一个转换构造函数。
转换构造函数允许从参数类型到构造函数类型的隐式转换。这里,第一个构造函数允许从一个int
类转换为一个对象MyClass
。第二个构造函数允许从字符串转换为类的对象MyClass
。第三......从班级MyClass
的对象到班级的对象MyClass
!
要成为转换构造函数,构造函数必须具有单个参数(在第二个参数中,第二个参数具有一个默认值)并且不使用关键字进行声明explicit
。
然后,main中的初始化可能如下所示:
int main(){ MyClass M = 1 ; // which is an alternative to MyClass M = MyClass(1) ; MyClass M = "super" ; // which is an alternative to MyClass M = MyClass("super", 0) ; // or MyClass M = MyClass("super") ;}
显式关键字和构造函数
现在,如果我们使用了explicit
关键字怎么办?
class MyClass{ public: int a, b; explicit MyClass( int i ) {}}
然后,编译器不会接受
int main() { MyClass M = 1 ; }
因为这是隐式转换。相反,必须写
int main() { MyClass M(1) ; MyClass M = MyClass(1) ; MyClass* M = new MyClass(1) ; MyClass M = (MyClass)1; MyClass M = static_cast<MyClass>(1); }
explicit
始终使用关键字来防止构造函数的隐式转换,它适用于类声明中的构造函数。
- 3 回答
- 0 关注
- 406 浏览
添加回答
举报
0/150
提交
取消