Читать «Полный справочник по С++» онлайн - страница 436
Герберт Шилдт
return 0;
}
В следующем примере с помощью объектов класса StrType по заданному имени проверяется, существует ли выполняемый модуль программы. Для этого достаточно ввести в командной строке имя файла без расширения. Затем программа повторно пытается найти выполняемый модуль, добавив к его имени расширение, и сообщает результат поиска. (Если файла нет, его невозможно открыть.) После проверки очередное расширение вычитается из имени файла, и вместо него подставляется новое. Ясность и простота этого примера, как и в предыдущем случае, обеспечивается классом StrType.
♦include “str.h"
♦include <iostream>
♦include <fstream> using namespace std;
II Расширения выполняемых файлов, char ext[3][4] = {
"EXE",
“COM",
"BAT"
int main(int argc, char *argv[])
{
StrType fname; int i ;
if(argc!=2) {
cout « "Командная строка: fname\n"; return 1;
}
fname = fname + "."; П Добавляем точку. for (i=0 ; i<3 ; i++) {
fname = fname + ext[i]; II Добавляем расширение. cout << "Проверка “ « fname « “ ifstream f(fname); if (f) {
cout « Существует\n"; f.close();
}
else cout << He существует\n0;
fname = fname - ext[i]; II Вычитаем расширение.
}
return 0;
}
Например, если программа называется isexec, и существует файл тет.ехе, командная строка isexec test выводит на экран следующие строки.
I Проверка TEST.EXE - Существует Проверка TEST.COM - Не существует Проверка TEST.ВАТ - Не существует
Следует заметить, что в этой программе конструктор ifstream использует объект класса StrType. Это возможно, поскольку в этом случае автоматически вызывается функция преобразования в тип char *. Как видим, осторожное применение возможностей языка C++ вознаграждается полной совместимостью стандартных типов и типов, разработанных пользователем.
Ш1 Принципы создания и интеграции новых типов
Как демонстрирует класс StrType, создавать и интегрировать новые типы в среду программирования довольно просто. Для этого нужно выполнить следующие действия.
1. Перегрузить все подходящие операторы, включая операции ввода-вывода.
2. Определить все подходящие функции преобразования.
3. Предусмотреть конструкторы, позволяющие легко создавать объекты в разнообразных ситуациях.
Одним из основных преимуществ языка C++ является его расширяемость. Не следует пренебрегать такой возможностью.
Ш Проблема
Существует одна весьма интересная проблема. Попробуйте реализовать класс StrType, используя стандартную библиотеку. Иначе говоря, для хранения символов следует применить не строку, а контейнер. Вместо указателей и функций примените для работы со строками итераторы и алгоритмы.
Полный справочник по
Глава 40
Синтаксический анализ выражений
^ есмотря на то что стандарт языка C++ довольно обширен, некоторые темы в нем не рассмотрены. В данной главе мы изучим одну из них: синтаксический анализ выражений. Программы синтаксического анализа используются для вычисления алгебраических выражений, например (10—8)*3. Они довольно полезны и применяются во многих приложениях. В то же время синтаксические анализаторы окружены ореолом таинственности. По разным причинам процедуры, использующиеся в процессе синтаксического разбора, остаются достоянием избранных. Действительно многие достаточно умудренные опытом программисты пасуют перед процессом синтаксического анализа выражений.