Содержание
- 2. Очевидно, что задать такую функцию компилятор не позволит, так как будет нарушена инкапсуляция член-данных len и
- 3. Если все-таки необходимо разрешить некоторой не член- функции (внешней функции) использовать член-данные из части private какого-либо
- 4. Формат объявления class String{ friend void Show(String &, int, int); // в любом месте определения класса
- 5. Кто они друзья? 1. внешняя по отношению к классу функция, как в нашем примере; 2. член-функция
- 6. Друг 3 3. другой определенный (или объявленный) на данный момент класс class A; // упреждающее объявление
- 7. Замечание1 Дружественность нужно использовать оптимально, так как она нарушает принцип инкапсуляции.
- 8. Замечание 2 Операции можно перегружать и как внешние дружественные классу функции. В этом случае одноместная операция
- 9. Пример. Перегрузка операции +, как внешней дружественной функции class String{ ... friend String operator + (String
- 10. String operator + (String &s, String &t) { String z(s.len + t.len + 1); // определим
- 11. п8. Перегрузка операций потокового ввода >> и вывода Библиотека iostream содержит стандартные классы ввода-вывода: класс istream
- 12. ostream В классе ostream определена операция перегруженная для форматного вывода базовых типов данных, т.е. class ostream
- 13. cout - это стандартное имя объекта - потока вывода, т.е. в системе есть описание ostream cout;
- 14. Например, пусть задана переменная x int x = 1185; Цепочка вывода cout представляет собой последовательное выполнение
- 15. Это важно Оператор, определенный как член- функция класса, первым операндом всегда имеет объект класса, т.е. *this.
- 16. перегрузка может быть определена таким образом class String{ public: ... friend ostream & operator { r
- 17. istream В классе istream определена перегруженная операция >> для базовых типов данных class istream{ ... public:
- 18. Имеется определение стандартного имени cin: istream cin; Если определить переменную int x; то операция cin >>
- 19. int x; float d; char c; Цепочка ввода cin >> x >> d >> c; это
- 20. >> для класса String class String{ ... public: ... friend istream & operator >>(istream &r, String
- 21. Использование String s1, s2(30); cin >> s1 >> s2;
- 22. Замечание У второго аргумента операции вывода (чтобы не выполнялось копирование), но не обязателен, а у операции
- 23. п9. Массивы объектов Массивы объектов определяются обычным образом: String s[3]; 3 объекта в статической области, каждый
- 24. Объекты, составляющие массив, конструктором c аргументами инициализируются каждый по отдельности, например String s1[3] = {String(“Иванов”), String(“Петров”)};
- 25. Конструкторы можно комбинировать: String ss[3]={12,20, “С++”}; Можно определить динамический массив: String *sp = new String[4]; Массив
- 26. Запомните! Нельзя явно инициализировать массив объектов, определенных в динамической области. Для таких случаев и должен быть
- 27. Использование массивов String s1[3] = {String(“Иванов”), String(“Петров”)}; String *sp = new String[4]; String s[3]; String ss[3]
- 28. Освобождение памяти При выходе из функции память для массивов s, s1 и ss будет освобождаться в
- 29. Ох уж эта память! Однако для массива объектов, определенного в динамической области, надо явно освободить память
- 31. Скачать презентацию