首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问一个类型隐式转换有关问题

2012-03-24 
问一个类型隐式转换问题#include iostream.hclass Complex{public:Complex(double r0, double v0):rea

问一个类型隐式转换问题
#include <iostream.h>

class Complex{
public:
  Complex(double r=0, double v=0):real(r),virt(v){}
  Complex(double r){real=r;virt=0;}
  friend Complex operator+(Complex a, Complex b);
friend ostream& operator<<(ostream& out, Complex& a);
private:
  double real;
  double virt;
};

ostream& operator<<(ostream& out, Complex& a){ return out <<a.real <<"+" <<a.virt <<"i\n"; }

Complex operator+(Complex a, Complex b)
{
  return Complex(a.real+b.real, a.virt+b.virt);
}


void main()
{
  Complex a(2,5), b(7,8), c(0,0);
  c = a + b;
  cout <<c;
  c = 4.1 + a;
  cout <<c;
  c = b + 5.6;
  cout <<c;
}


问一下各位 为什么 把Complex(double r){real=r;virt=0;}注解掉就可以运行呢 ?其实这句是我自己加的 书上是没有的!
想问一下是我加的不对,还是不应该加?不加的话他是怎么隐式转换的呢Complex(double r)???

 

[解决办法]
嗯,是默认实参的问题...
隐式转换自然用的是Complex(double r=0, double v=0):real(r),virt(v){} ,第二个参数用的是默认实参0
例如,如果显示调用Complex(4.1);那么重载解析时会有二义性
ps:自从改版以后,这CSDN速度是不是慢的有点离谱了?

热点排行