测试代码:
结果:
分析:
- 首先创建两个对象同时进行初始化所以两次调用带参的构造函数;
- 其次在创建一个 对象然后将其等于前两个对象相加,这里由于该类没有重载+运算符而是重载了int 所以当两个对象相加时编译器会将
- 调用int重载函数将其转化为两个int类型最后由于左边是一个类A的类型所以会创造一个临时对象并用a+a1的值进行初始化所以调用了A(int i)这个构造函数
- 所以会得到两个数据成员都是相等的当然也可以修改构造函数满足自己的需求
- 编译器处理运算时候会默认的转换称自己内置类型的运算所以遇到类的对象相加并且该类没有重载运算符只是重载了某个内置类型的转化此时编译器会自动根据该类提供的内置类型转化函数进行处理
- 编译器会自动的将等号右边的类型转化成左边的类型
- 5,6解释了上面的现象