Отсутствует пример списка инициализатора элемента на с. 184 Принципов программирования и практики с использованием C ++, 2-е изд. - PullRequest
0 голосов
/ 11 апреля 2020

В настоящее время у меня возникают проблемы с частью главы 6 «Программирование: принципы и практика с использованием C ++» (2-е издание, 3-е издание).

Согласно индексу книги, пример инициализатора члена список находится на странице 184.

Часть страницы 184 выглядит следующим образом:

"Здесь мы просто предоставим две функции-члена, чтобы дать нам более удобный способ инициализации токенов:

 class Token {
    public: 
    char kind; // what kind of token
    double value; // for numbers: a value
    };

Теперь мы можем инициализировать ("конструировать") объекты Token. Например:

Token t1 {'+'}; // initialize t1 so that t1.kind = '+'
Token t2 {'8,' 11.5}; // initialize t2 so that t2.kind = '8' and t2.value = 11.5

"

Является ли один из этих наборов кода примером члена список инициализатора, как указывал бы индекс? Я несколько сбит с толку, потому что, основываясь на другом ответе Stackoverflow ( Что это за странный синтаксис с двоеточием (":") в конструкторе? ), я думал, что список инициализатора члена будет выглядеть примерно так:

Name_value(string n, int v)
                :name(n), value(v) { }

(найденный в следующем коде Chrinkus на Github: https://github.com/Chrinkus/stroustrup-ppp/blob/master/chapter06/ex04_Name_value.cpp)

class Name_value {
    public:
        string name;
        int value;
        Name_value(string n, int v)
            :name(n), value(v) { }
};

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

Обновление: мне интересно, что упражнение для главы 6 включает в себя следующий код:

Token(char ch) // make a Token from a char
        : kind(ch), value(0)
    {}
    Token(char ch, double val) // make a Token from a char and a double
        : kind(ch), value(val)
    {}

Это инициализаторы членов, не так ли ? Интересно, хотел ли автор ссылаться на эти две функции, когда писал «Здесь мы просто предоставим две функции-члена, чтобы дать нам более удобный способ инициализации токенов:»

1 Ответ

2 голосов
/ 11 апреля 2020

Я связался с Бьярне по электронной почте, и он сразу же сообщил мне, что это ошибка, которая будет исправлена ​​в следующей печати. Поэтому я предполагаю, что этот раздел страницы 184 должен был выглядеть более или менее следующим образом:

"Здесь мы просто предоставим две функции-члена, чтобы дать нам более удобный способ инициализации токенов:

 class Token {
    public: 
    char kind; // what kind of token
    double value; // for numbers: a value
    Token(char ch)  // make a Token from a char
        :kind(ch), value(0) { }    
    Token(char ch, double val) // make a Token from a char and a double
        :kind(ch), value(val) { }

};

Теперь мы можем инициализировать ("конструировать") объекты Token.. "

Два списка инициализаторов элементов в приведенном выше коде были взяты из примера кода для детализации главы 6, которая доступно здесь: http://www.stroustrup.com/Programming/calculator02buggy.cpp (Обратите внимание, что этот код содержит некоторые преднамеренные ошибки, которые читатель должен устранить в ходе упражнения.)

Я надеюсь, это будет полезно всем, кто был смущен списками инициализаторов членов. До сих пор эта книга была очень полезна для меня, и я планирую продолжить ее чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...