C++ 为什么我们需要在参数化构造函数中预先初始化参数?
我正在声明一个用于添加复数的类comp。在add()函数中声明第三个comp对象时,会弹出错误 错误:调用“comp::comp()”时没有匹配的函数 下面给出的代码工作得非常好C++ 为什么我们需要在参数化构造函数中预先初始化参数?,c++,oop,parameters,constructor,default-constructor,C++,Oop,Parameters,Constructor,Default Constructor,我正在声明一个用于添加复数的类comp。在add()函数中声明第三个comp对象时,会弹出错误 错误:调用“comp::comp()”时没有匹配的函数 下面给出的代码工作得非常好 class comp { float real; float img; public: comp() { real=img=0; } comp(float a,f
class comp
{
float real;
float img;
public:
comp()
{
real=img=0;
}
comp(float a,float b)
{
real=a;
img=b;
}
void display()
{
cout<<real<<"+"<<img<<"i"<<endl;
}
friend comp add(comp, comp);
};
class comp
{
float real;
float img;
public:
comp(float a=0,float b=0)
{
real=a;
img=b;
}
void display()
{
cout<<real<<"+"<<img<<"i"<<endl;
}
friend comp add(comp, comp);
};
您不是在“初始化参数”,而是在为参数声明一个具有默认值的函数。这样就可以在不显式传递任何内容的情况下调用该函数,因此无需参数即可调用该函数。您似乎已经找到了答案<代码>组件c3代码>仅在存在可以无参数调用的构造函数时才起作用。对。你写了
compc3代码>。这将调用无参数的构造函数。但是没有一个构造函数没有参数。所以它向你抱怨说没有一个没有参数的构造函数。
class comp
{
float real;
float img;
public:
comp(float a=0,float b=0)
{
real=a;
img=b;
}
void display()
{
cout<<real<<"+"<<img<<"i"<<endl;
}
friend comp add(comp, comp);
};
comp add(comp c1, comp c2)
{
comp c3; //*The error pops up at this declaration*
c3.real=c1.real+c2.real;
c3.img=c1.img+c2.img;
return c3;
}