Перейти к содержимому
Задача · Шаблоны · урок 11 из 11

Задача: накопитель суммы

Напишите шаблон класса Tally — накопитель суммы значений типа T, поля добавьте сами. Вариативный метод template <typename... Ts> void add(Ts... xs) прибавляет к сумме все свои аргументы. T total() const возвращает сумму, а int count() const — сколько значений получили все вызовы add.

В примерах points — это Tally<int>, grams — Tally<double>, а text — Tally<std::string>:

  • после points.add(3, 4, 5) и points.add(10): points.total() → 22, points.count() → 4
  • после grams.add(1.5, 2.25): grams.total() → 3.75
  • после text.add("ab", "cd") и text.add("ef"): text.total() → "abcdef"

Ограничения: аргументы add — числа типа T или, для Tally<std::string>, текст в двойных кавычках. Строки склеиваются в порядке вызовов и аргументов, а вызов add() без аргументов ничего не меняет.

sum_all.cpp — cpp
cpp · строк: 16
Ctrl+Enter запуск · Esc выйти из редактора