Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我们需要在参数化构造函数中预先初始化参数?_C++_Oop_Parameters_Constructor_Default Constructor - Fatal编程技术网

C++ 为什么我们需要在参数化构造函数中预先初始化参数?

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

我正在声明一个用于添加复数的类comp。在add()函数中声明第三个comp对象时,会弹出错误 错误:调用“comp::comp()”时没有匹配的函数

下面给出的代码工作得非常好

 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;
    }