Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
mayak1fm
0 / 0 / 0
Регистрация: 12.01.2017
Сообщений: 18
#1

Объяснить код из книги Страуструпа

12.01.2017, 07:54. Просмотров 224. Ответов 4
Метки нет (Все метки)

Здравствуйте форумчане, помогите пожалуйста со строуструповским калькулятором. В книге он определяет тип Token для хранения лексем:
C++
1
2
3
4
5
6
7
8
9
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) { }
};
Потом добавляет туда входные данные с помощью вот этой функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Token get_token()    // read a token from cin
{
    char ch;
    cin >> ch;    // note that >> skips whitespace (space, newline, tab, etc.)
 
    switch (ch) {
 //not yet   case ';':    // for "print"
 //not yet   case 'q':    // for "quit"
    case '(': case ')': case '+': case '-': case '*': case '/': 
        return Token(ch);        // let each character represent itself
    case '.':
    case '0': case '1': case '2': case '3': case '4':
    case '5': case '6': case '7': case '8': case '9':
        {    
            cin.putback(ch);         // put digit back into the input stream
            double val;
            cin >> val;              // read a floating-point number
            return Token('8',val);   // let '8' represent "a number"
        }
    default:
        error("Bad token");
    }
}
Он тут создает из 2 типов новый тип, но не объясняет вот эти строчки:

C++
1
2
3
4
 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 может хранить очень много символов, они как раз записываются в эти скобки через запятую?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2017, 07:54
Ответы с готовыми решениями:

Не работает код с Функцией error и библиотекой std_lib_facilities из книги Страуструпа
Я новичок в программировании. Учу по книге Страуструпа, там вначале нужно было...

Почему не работает следующий код из книги Страуструпа (конструктор значений по умолчанию)
#include<iostream> using namespace std; class Date { int a, b;...

Простой пример из книги. Объяснить, почему код выдает такие результаты
Коллеги, привожу простой пример из книги Страуструппа. #include...

Задача из книги Страуструпа
Меня настораживает несколько странная формулировка, я не понимаю зачем так...

пример из книги страуструпа
struct pair { char* name; // ñòðîêà int val; //...

4
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,473
12.01.2017, 08:15 #2
Цитата Сообщение от mayak1fm Посмотреть сообщение
зачем тут фигурные скобки, почему они пусты и что в них можно написать?
Затем, что конструктор - тоже функция и у нее тоже есть код (в данном случае - пустой).
1
dailydose
659 / 205 / 88
Регистрация: 21.07.2016
Сообщений: 1,027
Записей в блоге: 2
Завершенные тесты: 1
12.01.2017, 09:13 #3
C++
1
2
3
4
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) { }
а не лучше ли так?
C++
1
2
  Token(char ch, double val = 0)     // A default parameter 
        :kind(ch), value(val) { }
1
mayak1fm
0 / 0 / 0
Регистрация: 12.01.2017
Сообщений: 18
12.01.2017, 09:14  [ТС] #4
Цитата Сообщение от Renji Посмотреть сообщение
Затем, что конструктор - тоже функция и у нее тоже есть код (в данном случае - пустой).
не понятно все равно
0
dailydose
659 / 205 / 88
Регистрация: 21.07.2016
Сообщений: 1,027
Записей в блоге: 2
Завершенные тесты: 1
12.01.2017, 09:22 #5
Цитата Сообщение от mayak1fm Посмотреть сообщение
не понятно все равно
конструктор нужен для инициализации экземпляра класса.

в данном случае инициализируются поля. это можно сделать двумя способами:
1) внутри фигурных скобок
C++
1
2
3
4
__constructor()
{
field_one = value;
}
2) в списке инициализации
C++
1
2
3
__constructor()
: field_one(value)
{}
1
12.01.2017, 09:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2017, 09:22

Задача из книги Страуструпа
Нужна ваша помощь или хотя бы подсказка, в одном из упражнений в книге...

Задачка из книги Страуструпа...
Доброго времени суток всем! Заранее благодарен за ответы и, возможные, пути...

Задача из книги Страуструпа (4.6.3)
Читаю книгу Страуструпа не могу понять как сортировать функцией sort. пример...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru