0
class AB 
{
    private:
    int a;
    int b;
    public:
    AB()    
    {
        a = 10;
        b = 10;
    } 
};

class AB 
{
    private:
    int a;
    int b;

    public:
    AB(int A, int B) 
    {
        a = A;
        b = B;
    }
};

Два отрывка кода. В ПЕРВОМ случае мы сразу инициализируем переменные в конструкторе, а во ВТОРОМ случае мы будем инициализировать при создании объекта. Зачем тогда было "придумывать" конструкторы с параметрами если как и в ПЕРВОМ случае можно сразу задать значения внутри конструктора и все. Не знаю, может мой вопрос глупый. Не судите. Я новичок

αλεχολυτ
  • 28,987
  • 13
  • 60
  • 119
  • 1
    ну, чтобы иметь возможность создавать разные объекты. В первом варианте каждый новый объект (создаваемый вызовом конструктора: AB()) будет иметь одинаковые значения полей a и b (равные 10). А во втором варианте можно создавать объекты, значения полей a и b которых будут разные: AB(0,0) или AB(7,5) и много других – diralik Dec 21 '17 at 21:33
  • А что будет если оставить конструктор вообще пустым? Без тела, без параметров. – Maryna Said Dec 21 '17 at 21:48
  • 2
    @MarynaSaid члены останутся неинициализированными, проще говоря, там будет мусор. – αλεχολυτ Dec 21 '17 at 21:50
  • Мне что-то это * можно сразу задать значения внутри конструктора* перефразируется в - зачем в функции sqrt(x) параметр x?! Его же можно задать прямо внутри функции sqrt() и всё! – Harry Dec 22 '17 at 07:23
  • @Harry sqrt42() :) – αλεχολυτ Dec 22 '17 at 14:14
  • @alexolut Тогда уж sqrt<42>()... – Harry Dec 22 '17 at 14:37
  • @Harry ну, функция-то сишная, пусть её и остаётся. Обёртку шаблонную конечно можно и написать. – αλεχολυτ Dec 22 '17 at 14:46

1 Answers1

2

Во-первых, это не инициализация, а присваивание. Для инициализации членов есть специальный синтаксис вида:

AB() : a(10), b(10) 

Это если для первого варианта. Далее идёт тело конструктора с фигурными скобками. Начиная с с++11 можно инициализировать члены по месту, то есть при определении класса.

Во-вторых, можно сделать единый конструктор с параметрами по умолчанию:

AB(int A = 10, int B = 10) : a(A), b(B) { }

Он позволит вам создавать объект с любым количеством параметров: от нуля до двух.

В-третьих, обо всём этом написано в любом учебнике по языку. Просто не торопитесь, а почитайте чуть дальше, чтобы понять.

Список литературы можете почерпнуть тут.

αλεχολυτ
  • 28,987
  • 13
  • 60
  • 119