C++关于转换构造函数自动调用的问题
来源:互联网 发布:vscode golang 格式化 编辑:程序博客网 时间:2024/05/23 02:06
声明Complex类:
class Complex
{public:
Complex(double);
friend Complex operator+(Complex &,Complex &);
private:
double real;
double image;
};
主函数:
int main()
{
c2=2+c2;
return 0;
}
提示错误信息为:
error C2678: 二进制“+”: 没有找到接受“int”类型的左操作数的运算符(或没有可接受的转换),可能是“Complex operator +(Complex &,Complex &)” 尝试匹配参数列表“(int,Complex)”时生成失败。
当把重载函数 friend Complex operator+(Complex &,Complex &) 改为 friend Complex operator+(Complex ,Complex ) 时又可以编译通过。
Complex类有一个声明了这个构造函数 Complex(double r),在C++里面默认如果类存在一个形参的构造函数时,可以将一个形参构造临时的类对象
也就是你的 c2= c 1+ 2;这个式子之所以正确,因为用2构造了一个临时对象。但是如果你把变量声明称引用,问题就出来了。这个对象是临时生成的,根本就不存在,因此就不能实现隐式类型转换;也就不成立了。
出错信息也很明显,没有实现重载。
当
Complex(double);
friend Complex operator+(Complex,Complex);
operator double();
同时存在时, c2= c 1+ 2;编译报错,因为存在二义性。
当
Complex(double);
friend Complex operator+(Complex &,Complex &);
operator double();
同时存在时, c2= c 1+ 2;运行可以正常通过,程序把c1通过类型转换函数转换成double型,相加得到的double型再通过转换构造函数转换成Complex型,然后赋值给c2,当转换构造函数的参数为实部时,所得结果c2的虚部恒为0(初始化值).
- C++关于转换构造函数自动调用的问题
- 关于构造函数,拷贝构造函数与析构函数的自动调用的问题分析
- 关于构造函数的调用问题
- 关于C++ 构造函数调用构造函数的问题
- C++构造函数调用,自动类型转换
- 关于Matlab调用C函数的问题
- 关于C语言函数调用的问题
- java中关于构造函数内部调用自己的问题
- 关于派生类构造函数与基类构造函数的调用顺序问题
- 关于派生类构造函数与基类构造函数的调用顺序问题
- 关于派生类构造函数与基类构造函数的调用顺序问题
- 关于派生类构造函数与基类构造函数的调用顺序问题
- PHP5的构造函数不自动调用
- 关于c函数c++函数的调用问题
- 关于继承的构造,函数的调用
- c++-转换构造函数
- 关于构造函数的调用顺序
- 关于构造函数的调用顺序
- autolayout - sizeClass 学习 ~ two
- PAT(Advance) 1098. Insertion or Heap Sort (25)
- Java关于引用和对象的详解
- JS字面量对象
- hdu4027 Can you answer these queries?
- C++关于转换构造函数自动调用的问题
- 什么时候全表扫描比使用索引扫描能更快?
- c++ Log库,调试库
- 开发者网站
- Android下drawable,Bitmap,Canvas与Paint区别
- 关于PagerAdapter的instantiateItem方法
- Android布局中实现圆角边框
- merge sort 一些变种、应用
- 【ASP.NET北大青鸟】--添加广告控件