Конструктор

А может кто-нибудь рассказать чем отличается инициализация полей класса в таком виде:

ClassA::ClassA(int a_a, int a_b) {
    a = a_a;
    b = a_b;
}

от такого:

ClassA::ClassA(int a_a, int a_b) : a(a_a), b(a_b) { }

?

ClassA::ClassA(int a_a, int a_b) {
    //Этап инициализации к этому моменту уже пройден
    a = a_a;//Это уже присваивание. 
    b = a_b;
}

.

ClassA::ClassA(int a_a, int a_b) : 
    a(a_a), //Непосредственно инициализация
    b(a_b)

А в чем отличие то? В обоих случаях к моменту завершения конструктора поля a и b получают свои значения из аргументов.

Отличие в том,что первый способ не применим к константам, которые как известно должны получать значения на этапе инициализации, иначе выдаст ошибку.

const int a = a_a; // можно

const int a; // нельзя
a = a_a;

А простым переменным будет без разницы какой способ применишь.

А в чем отличие то?

Константы и ссылки не получится так использовать.
Они должны быть инициализированы.
Также это может не прокатить, например,
с объектами классового типа, которые запрещено присваивать,
или, например, это может стукнуть по производительности
для типов со сложной инициализацией или присваиванием.
Но для начала почитайте о том что такое
инициализация и что такое присваивание.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.