C++转换构造函数

来源:百度知道 编辑:UC知道 时间:2024/06/04 15:00:12
按照谭浩强的习题编的程序,vs2008编译有误:
Complex(double r,double i)
{
real=r;
imag=i;
}
按照谭老爷子的讲解,主函数里的c3=c1+2.5这一行,应该这样理解,首先调用重载运算符函数,计算c1+2.5,这时候又发现,2.5不是Complex类的,这时系统寻找类型转换函数,找到了,就应该调用类型转换函数,将2.5强制转换成Complex类的,完事了,在继续调用对+的重载函数。可是我运行的时候,VS2008说,+号两边的变量类型不对,应该是没把2.5转换成Complex类对象。为什么呢?期待高手为小弟解惑,先行谢过……
程序没发全,不好意思:

// zh.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;

class Complex
{
public:
Complex()
{
real=0;
imag=0;
}

Complex(double r)
{
real=r;
imag=0;
}
Complex(double r,double i)
{
real=r;
imag=i;
}
void display()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
friend Complex operator+(Complex&,Complex&);
p

编译器是想做强制类型转换, 可是它怎么知道该怎么转? 就需要你给一个参数是double的构造函数, 你这个两个参数的构造函数明显没法用, 编译器不知道另一个参数该给什么

所以要么你写个单变量double型的构造函数, 要么你给型参i写上默认参数 Complex(double r, double i=0)