Таблица 14.4. Манипуляторы с аргументами
Манипулятор Эквивалентный метод
setprecision(streamsize п) streamsize precision(streamsize n);
setw(streamsize п) streamsize width(streamsize n);
setfill(char ch) char fill(char fill);
setiosflags(fmtflags n) fmtflags setf(fmtflags flag);
resetiosflags(fmtflags n) fmtflags unsetf(fmtflags flag);
Шестой манипулятор позволяет установить систему счисления: setbase(int base)
Этот манипулятор может использоваться вместо манипуляторов dec, oct, hex (или вместо установки соответствующих флагов):
• вызов setbase(8) эквивалентен использованию манипулятора oct;
• вызов setbase(10) эквивалентен использованию манипулятора dec;
• вызов setbase(16) эквивалентен использованию манипулятора hex.
Вызов setbase(O) задает вывод в десятичной системе счисления, например: cout << setbase(16) << 10 << ';' << setbase(O) << 0x10 << endl;
В результате на экран выводится следующее: а;16
Буква «а» — это 10 в шестнадцатеричной системе счисления, а шестнадцатерич-ная константа 0x10 выводится как десятичное число 16.
Применение манипуляторов вместо установки флагов и вызова методов облегчает программисту жизнь, так как манипуляторы задаются непосредственно в операции ввода-вывода в том месте, где необходимы. Простой пример показывает, насколько проще иметь дело с манипуляторами, чем с флагами и методами:
// вывод с использованием методов и флагов cout.width(10); cout.fi11(); cout.setf(ios::internal, ios::adjustfield); cout.setf(ios::hex, ios::basefield); cout << val;
cout.put('\n'); cout.flush();
// тот же вывод с использованием манипуляторов
cout << setfillC-') << setw(10) << hex << internal << val << endl;
Комментарии, как говорится, излишни!
Для программиста важен хороший принтер для печати исходников программ на с++, посмотрите принтер konica minolta.
Контрольные вопросы
1. Какие две роли исполняет наследование?
2. Какие виды наследования возможны в С++?
3. Чем отличается модификатор доступа protected от модификаторов private и public?
4. Чем открытое наследование отличается от закрытого и защищенного?
5. Может ли структура наследовать от класса? А класс от структуры?
6. Какой тип наследования от структуры реализуется по умолчанию? А от класса?
7. В каких случаях в классе-наследнике недоступны элементы базового класса?
8. Какие функции не наследуются?
9. Сформулируйте правила написания конструкторов в производном классе.
10. Каков порядок вызова конструкторов? А деструкторов?
11. Если имя нового поля совпадает с именем унаследованного, то каким образом разрешить конфликт имен?
12. Каким образом в конструкторе-наследнике вызвать конструктор базового класса?
13. Что происходит, если имя метода-наследника совпадает с именем базового метода?
14. Каким образом в операции присваивания класса-наследника вызвать операцию присваивания базового класса?
15. Может ли вложенный класс наследовать от внешнего? А внешний от вложенного?
16. Сформулируйте принцип подстановки.
17. Когда выполняется понижающее приведение типов? А повышающее?
18. Объясните, что такое «срезка», или «расщепление».
19. В каких случаях используется объявление usi ng?
20. Какой вид наследования «ближе» к композиции: открытое или закрытое? |