Бьерн Страуструп.
Язык программирования С++
148
выражений, состоящих из целых констант и операций +, -, * и /. Общий интерфейс класса должен
выглядеть примерно так:
class expr {
//
...
public:
expr(char*);
int
eval();
void
print();
};
Конструктор expr::expr() имеет параметр-строку, задающую выражение.
Функция expr::eval() возвращает
значение выражения, а expr::print() выдает представление
выражения в cout. Использовать эти
функции можно так:
expr("123/4+123*4-3");
cout << "x = " << x.eval() << "\n";
x.print();
Дайте два определения класса expr: пусть в первом для представления используется связанный
список узлов, а во втором – строка символов. Поэкспериментируйте с разными форматами печати
выражения, а именно: с полностью
расставленными скобками, в
постфиксной записи, в
ассемблерном коде и т.д.
6. (*1) Определите класс char_queue (очередь символов) так, чтобы его общий интерфейс не зависел от
представления. Реализуйте класс как: (1) связанный список и (2) вектор. О параллельности не думайте.
7. (*2)
Определите класс histogram (гистограмма), в котором ведется подсчет чисел в определенных
интервалах, задаваемых в виде параметров конструктору этого класса. Определите функцию выдачи
гистограммы. Сделайте обработку значений, выходящих за интервал. Подсказка: обратитесь к
.
8. (*2)
Определите несколько классов, порождающих случайные числа с определенными распределениями.
Каждый класс должен иметь конструктор, задающий параметры распределения и функцию draw,
возвращающую "следующее" значение. Подсказка: обратитесь к и классу intset.
9. (*2)
Перепишите примеры date ($$5.2.2 и $$5.2.4), char_stack ($$5.2.5) и intset ($$5.3.2), не используя
никаких функций-членов (даже конструкторов и деструкторов). Используйте только class и friend.
Проверьте каждую из новых версий и сравните их с версиями, в которых используются функции-члены.
10. 10.(*3) Для некоторого языка составьте определения класса для таблицы имен и класса,
представляющего запись в этой таблице. Исследуйте транслятор для этого языка, чтобы узнать,
какой должна быть настоящая таблица имен.
11. 11.(*2) Измените класс expr из упражнения 5 так, чтобы в выражении можно было использовать
переменные и операцию присваивания =. Используйте класс для таблицы имен из упражнения 10.
12. 12.(*1) Пусть есть программа:
#include
main()
{
cout
<
< "Всем привет\n";
}
Измените ее так, чтобы она выдавала:
Инициализация
Всем привет
Удаление
Саму функцию main() менять нельзя.
Бьерн Страуструп.
Язык программирования С++
149
Достарыңызбен бөлісу: