从类类型到类类型

时间:2015-12-18 13:40:19

标签: c++

假设我必须进行类型转换(从一个类的对象到另一个类的对象) 然后我知道它可以通过两种方式完成

1-通过在目的地侧制作构造函数
2-通过使用转换函数(运算符)

所以,我想知道构造函数如何作为构造函数被调用,只有在创建对象时才调用,而在我们的情况下,由于我的对象已经创建,因此没有对象的创建...

例: 假设有两个类测试和基础, 然后

void main
     test ob1
     base ob2
(ob1=ob2)   how this statement calls constructor?

我将链接附加到我的程序代码.. http://codepad.org/1IK4R3Q8

2 个答案:

答案 0 :(得分:0)

如果该语句调用构造函数,那么它也将调用析构函数。您显示的主要操作是operator=ob1分配了某些内容

某些可能是test类型的临时属性,可能是以您描述的两种方式之一创建的,在这种情况下,在调用析构函数operator=之后。但是您描述的转换可能性可能会返回test&test const&operator=可能会采用该转换,因此不需要构造函数或析构函数。

您可能还需要进行任何转换。可能是test::operator=有一个超载来直接获取提供的base&而没有先转换它。

答案 1 :(得分:0)

您所看到的是隐式转换构造。编译器正在调用类con的复制构造函数,它将类型为test的对象作为参数。

编译器找不到兼容的赋值运算符,因此它会看到它是否可以通过其他方式转换ob1对象。

它发现con类具有兼容的复制构造函数,因此它会隐式调用 以允许进行赋值。

参见参考here

  

隐式声明和用户定义的非显式复制构造函数   并且移动构造函数正在转换构造函数。

您可以在explicit中的复制构造函数声明之前使用关键字con来避免此行为。这将阻止编译器隐含地调用它。