Презентация Друзья. Потоковые ввод,вывод. Массив объектов онлайн

На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Друзья. Потоковые ввод,вывод. Массив объектов абсолютно бесплатно. Урок-презентация на эту тему содержит всего 30 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Образование » Друзья. Потоковые ввод,вывод. Массив объектов



Оцените!
Оцените презентацию от 1 до 5 баллов!
  • Тип файла:
    ppt / pptx (powerpoint)
  • Всего слайдов:
    30 слайдов
  • Для класса:
    1,2,3,4,5,6,7,8,9,10,11
  • Размер файла:
    229.58 kB
  • Просмотров:
    66
  • Скачиваний:
    0
  • Автор:
    неизвестен



Слайды и текст к этой презентации:

№1 слайд
П. Дружественность Пример.
Содержание слайда: П.7 Дружественность Пример. Пусть некоторая внешняя функция Show выводит строку в красивом виде - в ‘*’: void Show( String &s) {int I, k = s.n; for(i = 0; i < k + 4; i++) cout << ‘*’; cout<<“* ” << s.line << “ *”; for(i = 0; i < k + 4; i++) cout << ‘*’; } String s(“Hello”); Show(s);

№2 слайд
Очевидно, что задать такую
Содержание слайда: Очевидно, что задать такую функцию Очевидно, что задать такую функцию компилятор не позволит, так как будет нарушена инкапсуляция член-данных len и line.

№3 слайд
Если все-таки необходимо Если
Содержание слайда: Если все-таки необходимо Если все-таки необходимо разрешить некоторой не член- функции (внешней функции) использовать член-данные из части private какого-либо класса, ее можно объявить дружественной этому классу.

№4 слайд
Формат объявления class
Содержание слайда: Формат объявления class String{ friend void Show(String &, int, int); // в любом месте определения класса char *line; … };

№5 слайд
Кто они друзья? . внешняя по
Содержание слайда: Кто они друзья? 1. внешняя по отношению к классу функция, как в нашем примере; 2. член-функция известного на данный момент другого класса Например, функция f – член-функция класса А class A { … тип_возвр_знач f(аргументы); ...}; class B { … friend тип_возвр_знач A :: f(аргументы); // сама f определяется в классе A ... };

№6 слайд
Друг . другой определенный
Содержание слайда: Друг 3 3. другой определенный (или объявленный) на данный момент класс class A; // упреждающее объявление class B{ friend class A; .... }; Такое объявление означает, что всем член- функциям класса A разрешается доступ ко всем член-данным класса B, но не наоборот

№7 слайд
Замечание Дружественность
Содержание слайда: Замечание1 Дружественность нужно использовать оптимально, так как она нарушает принцип инкапсуляции.

№8 слайд
Замечание Операции можно
Содержание слайда: Замечание 2 Операции можно перегружать и как внешние дружественные классу функции. В этом случае одноместная операция имеет один аргумент - объект класса, а двуместная - 2: объект класса и второй операнд.

№9 слайд
Пример. Перегрузка операции ,
Содержание слайда: Пример. Перегрузка операции +, как внешней дружественной функции class String{ ... friend String operator + (String &, String &); ... };

№10 слайд
String operator String amp s,
Содержание слайда: String operator + (String &s, String &t) String operator + (String &s, String &t) { String z(s.len + t.len + 1); // определим локальную переменную // суммарной длины, пустую строку strcpy(z.line, s.line); strcat(z.line, t.line); z.len = strlen(z.line); return z; }

№11 слайд
п . Перегрузка операций
Содержание слайда: п8. Перегрузка операций потокового ввода >> и вывода << Библиотека iostream содержит стандартные классы ввода-вывода: класс istream - потоковый ввод со стандартного устройства stdin (клавиатура), класс ostream - потоковый вывод на стандартное устройство вывода stdout (монитор). Рассмотрим их.

№12 слайд
ostream В классе ostream
Содержание слайда: ostream В классе ostream определена операция <<, перегруженная для форматного вывода базовых типов данных, т.е. class ostream { ... public: ostream & operator <<(char *); ostream & operator <<(char); ostream & operator <<(double); ostream & operator <<(long int); ... };

№13 слайд
cout - это стандартное имя
Содержание слайда: cout - это стандартное имя объекта - потока cout - это стандартное имя объекта - потока вывода, т.е. в системе есть описание ostream cout; Поэтому операцию cout << x; рассматриваем как двуместную: слева первый операнд - имя потока вывода, справа второй операнд – имя переменной вывода. Так как возвращаемое значение – ссылка & на объект cout, то можно писать цепочки вывода.

№14 слайд
Например, пусть задана
Содержание слайда: Например, пусть задана переменная x Например, пусть задана переменная x int x = 1185; Цепочка вывода cout << ”x = “ << x << ’\n’; представляет собой последовательное выполнение операции << с аргументами разного типа:

№15 слайд
Это важно Оператор,
Содержание слайда: Это важно Оператор, определенный как член- функция класса, первым операндом всегда имеет объект класса, т.е. *this. Первым операндом операции << является поток вывода, поэтому ее можно перегрузить для абстрактных типов только, как дружественную классу.

№16 слайд
lt lt для класса String
Содержание слайда: << для класса String перегрузка может быть определена таким образом class String{ public: ... friend ostream & operator<<(ostream &r, String &s) { r << s.line; return r; } }; Теперь и для объектов класса String можно применять операцию <<: String s(“Иванов”); cout << s;

№17 слайд
istream В классе istream
Содержание слайда: istream В классе istream определена перегруженная операция >> для базовых типов данных class istream{ ... public: istream & operator >>(char *); istream & operator >>(char &); istream & operator >>(long int &); istream & operator >>(double &); istream & operator >> (float &); ..... };

№18 слайд
Имеется определение
Содержание слайда: Имеется определение стандартного Имеется определение стандартного имени cin: istream cin; Если определить переменную int x; то операция cin >> x; означает, что введенное число со стандартного устройства ввода передается в переменную x. В этой операции cin - первый операнд, x – второй операнд. Также можно писать цепочки ввода.

№19 слайд
int x float d char c int x
Содержание слайда: int x; float d; char c; int x; float d; char c; Цепочка ввода cin >> x >> d >> c; это последовательное применение операции >> с аргументами разного типа:

№20 слайд
gt gt для класса String class
Содержание слайда: >> для класса String class String{ ... public: ... friend istream & operator >>(istream &r, String &s) { char buf[80]; cout<<”\nВведите строку, в конце Enter”; gets(buf); String q(buf); // работает String ( char*) s = q; // работает операция = return r; } // работает ~String для q };

№21 слайд
Использование String s , s
Содержание слайда: Использование String s1, s2(30); cin >> s1 >> s2;

№22 слайд
Замечание У второго аргумента
Содержание слайда: Замечание У второго аргумента операции вывода << тип ссылка & желателен (чтобы не выполнялось копирование), но не обязателен, а у операции ввода >> этот аргумент обязательно должен иметь тип & - ссылка

№23 слайд
п . Массивы объектов Массивы
Содержание слайда: п9. Массивы объектов Массивы объектов определяются обычным образом: String s[3]; 3 объекта в статической области, каждый захватывает память конструктором по умолчанию по 80 байтов для пустой строки

№24 слайд
Объекты, составляющие массив,
Содержание слайда: Объекты, составляющие массив, конструктором Объекты, составляющие массив, конструктором c аргументами инициализируются каждый по отдельности, например String s1[3] = {String(“Иванов”), String(“Петров”)}; Если аргумент один, как в примере, то запись можно сократить String s1[3] = {“Иванов”,”Петров”}; обратите внимание: элемент s1[2] инициализируется по умолчанию пустой строкой.

№25 слайд
Конструкторы можно
Содержание слайда: Конструкторы можно комбинировать: Конструкторы можно комбинировать: String ss[3]={12,20, “С++”}; Можно определить динамический массив: String *sp = new String[4]; Массив из 4 объектов в динамической области. Для каждого объекта память по указателю line также в динамической области берется конструктором по умолчанию по 80 байтов.

№26 слайд
Запомните! Нельзя явно
Содержание слайда: Запомните! Нельзя явно инициализировать массив объектов, определенных в динамической области. Для таких случаев и должен быть предусмотрен конструктор по умолчанию. String *sp = new String [5]= {10,30,”Что такое?”, “Нельзя так инициализировать?!”,33}; // Да, так нельзя!!!

№27 слайд
Использование массивов String
Содержание слайда: Использование массивов String s1[3] = {String(“Иванов”), String(“Петров”)}; String *sp = new String[4]; String s[3]; String ss[3] = {12,20, “С++”}; s1[1].Print(); // вывод ”Петров” sp[0] = ss[2]; // Работает перегруженная // операция ‘=’ : sp[0] = ”C++” s1[1] [0] = ’В’;// ‘Петров’ превратится в ‘Ветров’ s[0] = s1[0] + s1[0]; // вместо пустой строки s[0] получим два ‘Иванов’-ых, то есть “ИвановИванов”

№28 слайд
Освобождение памяти При
Содержание слайда: Освобождение памяти При выходе из функции память для массивов s, s1 и ss будет освобождаться в 2 этапа - сначала деструктором класса String для каждого элемента, затем стандартным деструктором от локальных полей len, line.

№29 слайд
Ох уж эта память! Однако для
Содержание слайда: Ох уж эта память! Однако для массива объектов, определенного в динамической области, надо явно освободить память при выходе из функции операцией delete [] sp; В этом случае освобождение происходит в 3 этапа: - деструктором класса String, - операцией delete от полей line и len каждого элемента массива и, наконец, - стандартным деструктором от поля sp. Если этот оператор не задать, то будет освобождена память только от ячейки sp.

№30 слайд
Решение Complex operator
Содержание слайда: Решение Complex:: operator String() {char r1[25],r2[10]; sprintf(r1,"%7.2f",re); sprintf(r2,"%7.2f",im); strcat(r1," + i*"); strcat(r1,r2); String *s=new String(r1); return *s; }

Скачать все slide презентации Друзья. Потоковые ввод,вывод. Массив объектов одним архивом: