Почему нам нужно заранее инициализировать параметры в параметризованном конструкторе?

#c #oop #parameters #constructor #default-constructor

#c #ооп #параметры #конструктор #default-конструктор

Вопрос:

Я объявляю один класс comp для добавления комплексных чисел, ошибка появляется при объявлении третьего объекта comp в функции add() ошибка: нет соответствующей функции для вызова ‘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()
        {
            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);
    };
  

Я вставляю код для функции add() ниже

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

Комментарии:

1. Кажется, вы нашли ответ. comp c3; будет работать, только если есть конструктор, который можно вызвать без аргументов.

2. Правильно. Вы написали comp c3; . Это вызывает конструктор без аргументов. Но нет конструктора без аргументов. Итак, он жалуется вам и говорит, что нет конструктора без аргументов.

Ответ №1:

Вы не «инициализируете параметры», вы объявляете функцию со значениями параметров по умолчанию. Это позволяет вызывать функцию без явной передачи чего-либо, поэтому она вызывается без параметров.