Программирование >>  Расширенная версия языка c++ 

1 ... 83 84 85 [ 86 ] 87 88 89 ... 227


264 , Самоучитель С++

1. В незавершенной программе имеется класс strtype. Для вхвода строки на экран создайте пользовательскую функцию вывода:

ftinclude<iostream>

ttinclude <cstring> -

tinclude <cstdlib>

using namespace std; class strtype {

char *p;

int len; public:

strtype (char *ptr) ; ~strtype №lete [] p; }

friend ostream &operator (ostream (istreani, strtype Sofc);

strtype::strtype(char *ptr) {

len = strlen(ptr) + 1; -i . -

p = new char [len] ; 1£C.!P) i

cou Сшибка в1деления памя \п ; exit(1);

strcpy ptr)

I ; 1.1.

Здесь добавьте собственную функцию вывода

int ()

strtype si ( Это оверка ) Мне нравится С++ ); coat з1 \п з2;

return 0;

2. Замените в следующей программе функцию show() пользовательской функцией вывода:

tinclude <iostream>

using std;

class planet {

protected:

double distance; расстояние в милях от Солнца



8.6. Пользовательские функции ввода

Точно так же, как мы перегружали оператор вывода <<, можно перегрузить и оператор ввода >>. В С++ оператор ввода >> иногда называют оператором извлечения (extraction operator), а функцию, перегружающую этот оператор, - функцией извлечения (extractor). Смысл этих терминов в том, что при вводе информации мы извлекаем данные из потока. Во избежание путаницы мы будем называть функцию извлечения пользовательской функцией ввода.

Здесь показана основная форма пользовательской функции ввода:

istream 6operator (istream fistream, имя класса о&ьвкт) {

тел ской функции ввода

int revolve; полный оборот в днях

public:

planet(double d, int r) { distance d; revolve = :; )

class earth: public planet {

double erence; окружность орбиты . /

public:

earth(double d, in anet (d, r) ( ( :

circumference = 2 * distance * 3.1416; м. r . . i -i i

I ; *

/*Перепишите функции () так, чтобы информации далась с

помощью пользовательской функции вывода

*/

void show О {

cout Расстояние от Солнца: distance \п; cout Оборот вокруг Солнца: revolve < \п\- > cout Окружноств орбиты: circumference \п;

earth

cout ob; return 0;

3. Вспомните, почему пользовательская функция вывода не может быть функцией-членом.



Примёры

1. В этой программе к классу coord добавлена пользовательская функция ввода:

Добавление мужественной функции ввода для объектов типа coord ♦include <io3tream>

using namespace std;

class coord {

int X, у;

public:

coord(} { x = 0; у 0; }

coord(int i, int j) { x = i; у = j; }

friend ostream Soperator (ostream Sstream, coord ob) ; friend istream £operator (istream Sstream, coord sob); }; [

ostream ator (ostream sstream, coord ob) (

strea< ob. ob.y -Nn ;

return stream; .

)

istream ( istream sstream, coord &ob) ..-

{ ... ;

cout Введите координаты: ;

stream ob.x > ob.y; : . , . l.....-

return stream; . ,.>-:. . ,. .

int main 0 y.,H(-- v*\

coord a(l, I: , b(10, 23) ;

cou< a b; . . i . -

return stream;

Пользовательские функции ввода возвращают ссылку на пото еаш, который является потоком ввода. Первый параметр тоже явжется ссылкой на поток ввода. Второй параметр - это ссылка на объект, получающий вводимую информацию.

Так же, как и пользовательская кция вывода, пользовательская функция ввода не может быть функцией-членом. Хотя внутри такой функции может быть выполнена любая операция, лучше ограничить ее работу вводом информации.



1 ... 83 84 85 [ 86 ] 87 88 89 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика