|
Программирование >> Расширенная версия языка c++
В результате выполнения программы на экран выводится следующее: 10, 23 Пользовательская функция вывода этой программы иллюстрирует одну очень важную для создания ваших собственных функций особенность: их нужно разрабатывать, возможно, более обобщенными. В данном конкретном случае инструкция внутри функции вставляет значения х и у в поток stream, который и является передаваемым в функцию потоком. Как вы увидите в следующей главе, та же самая пользовательская функция вывода, которая в нашем примере используется для вывода информации на экран, может использоваться и для ее вывода в любой поток. Тем не менее, начинающие программисты иногда пишут пользовательскую функцию вывода для класса coord следующим образом: ostream coord ob) cou< ob. ob.y Xn stream; В этом случае выражение жестко запрограммировано на вывод информации на стандартное устройство вывода, связанное с классом cout. Это ведет к тому, что другие потоки не могут воспользоваться вашей функцией. Вывод очевиден, следует делать свои возможно, более обобщенными, по- скольку это никогда не повредит, а иногда может оказаться полезным. 2. В следующей версии предыдущей программы, пользовательская функция вывода не является дружественной классу coord. Поскольку у пользовательской функции вывода нет доступа к закрытой части класса coord, переменные х и у приходиться делать открытыми. Создание не дружественной функции шода для объектов типа coord iinciude <iGStream> using namespace std; ostream &operator (ostream eairi, coord ob) { stream , ob.y \n ; return stream; int main () coord a(l, 1) , b(10, 23) ; . -л cou a b; return 0; ... 62 Самоучитель C++ class coord { public: int x, у; должны быть открытыми coord{) { X = 0; у - 0; } coord (inti, int j) { x = i; у = j; } Пользовательская функции ода для объектов класса coord ostream soperato (ostream sstream, coord ob) { stream -c ob.x ob.y \n; return stream; coord a(l, 1) , b(10, 23) ; cout a b; return 0; ) c. ., 3. Возможности пользовательских функций вывода не ограничиваются выводом текстовой информации. Они могут выполнить любое действие или преобразование, необходимое для вывода информации в том виде, который требуется из-за особенностей устройства или ситуации. Например, совершенно разумно создать пользовательскую функцию вывода для отправки информации на плоттер. В этом случае, кроме собственно информации, функция передаст предназначенные для управления плоттером коды. Чтобы вы могли почувствовать вкус к такого рода функциям, в следующей программе создается класс triangle, в котором хранится ширина и высота прямоугольного треугольника. Пользовательская функция вывода этого класса выводит треугольник на экран. Эта программа рисует прямоугольные треугольники tinclude <iostreain> using namespace std; . . , class triangle { . int height, base; :. : . - public; triangle (int h, int b) { height ase= b; } friend ostream Soperator (ostream Sstream, triangle ob) ; < i рисование треугольника ostream &operator- (ostream Sstream, triangle ob) ( int i, j, h, k; I int main() { triangle! (5, 5), t2 (10, 10), t3(12, 12); cout tl; cout endl << endl t3; return 0; Отметьте, что должным образом разработанная пользовательская функция вывода может быть целиком вставлена в обычное выражение ввода/вывода. После выполнения программы на экран выводится следующее: ********** ************ * * * * * * i = j base - 1; for(h=ob.height - 1; h; h -) { for(k=i; k; к -) stream ; stream * ; -i:ij;=i) [ for(k=j - i - 1; k; k -) stream ; stream * ; i -; stream \n; for(k=0; e; k++) stream stream \n; return Stream;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |