Лекция 11. Введение в ООП. Часть 4 Красс Александр Alexander.Krass@gmail.com СПбГУ ИТМО, 2008.

Презентация:



Advertisements
Похожие презентации
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
Advertisements

Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Лекция 16. Введение в ООП. Часть 7 Красс Александр СПбГУ ИТМО, 2008.
Лекция 9. Введение в ООП. Часть 2 Красс Александр СПбГУ ИТМО, 2008.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Лекция 15. Введение в ООП. Часть 6 Красс Александр СПбГУ ИТМО, 2008.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Наследование Полиморфизм ВЫЗОВ КОНСТРУКТОРОВ И ДЕСТРУКТОРОВ ПРИ НАСЛЕДОВАНИИ.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лекция 18. Повторение и введение в STL (часть 1) Красс Александр СПбГУ ИТМО, 2008.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
1 Переопределение операций Макаревич Л. Г.. 2 Зачем нужна перегрузка операций? class Complex { double re; double im; public: Complex(double r=0, double.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Лекция 5. Подготовка к ООП Красс Александр СПбГУ ИТМО, 2008.
Дружественные функции Дружественные функции – это функции, объявленные вне класса, но имеющие доступ к закрытым и защищенным полям данного класса Дружественная.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Лекция 7. Введение в ООП через практику. Часть 2 Красс Александр СПбГУ ИТМО, 2008.
Транксрипт:

Лекция 11. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008

2 Темы Аргументы по умолчанию Конструкторы копирования Друзья

3 Аргументы по умолчанию При объявлении прототипа функции можно указывать для её параметров значения по умолчанию.

4 Аргументы по умолчанию int boo(int arg) { return arg * 2; } void main() { cout << boo(5) << boo(10) }

5 Аргументы по умолчанию int boo(int arg = 5) { return arg * 2; } void main() { cout << boo() << boo(10) }

6 Аргументы по умолчанию Если параметр не имеет значения по умолчанию, то и предыдущие параметры не могут иметь значений по умолчанию.

7 Аргументы по умолчанию int boo(int arg1, double arg2, char arg3 = 'A'); int boo(int arg1, double arg2 =.1, char arg3 = 'A'); int boo(int arg1, double arg2 =.1, char arg3); int boo(int arg1 = 7, double arg2 =.1, char arg3 = 'A');

8 Аргументы по умолчанию int boo(int arg1, double arg2, char arg3 = 'A'); // OK int boo(int arg1, double arg2 =.1, char arg3 = 'A'); // OK int boo(int arg1, double arg2 =.1, char arg3); // Ошибка! int boo(int arg1 = 7, double arg2 =.1, char arg3 = 'A'); // OK

9 Аргументы по умолчанию Если Вы используете прототип функции, то аргументы по умолчанию разрешено указывать только там.

10 Аргументы по умолчанию int boo(int arg = 5); void main() { cout << boo() << foo(10) } int boo(int arg) { return arg * 2; }

11 Аргументы по умолчанию class VeryImportantPerson { public: VeryImportantPerson(int iq = 85) : iq_(iq) {} int GetIQ() { return iq_; } private: const int iq_; }; void main() // На консоли: { // 85 VeryImportantPerson poser; // 105 VeryImportantPerson friend(105); cout << poser.GetIQ() << endl << friend.GetIQ(); }

12 Аргументы по умолчанию class VeryImportantPerson { public: VeryImportantPerson(int iq = 85) : iq_(iq) {} int GetIQ() { return iq_; } private: const int iq_; }; void main() // На консоли: { // 85 VeryImportantPerson poser; // 105 VeryImportantPerson friend(105); cout << poser.GetIQ() << endl << friend.GetIQ(); }

13 Аргументы по умолчанию class VeryImportantPerson { public: VeryImportantPerson(int iq = 85); int GetIQ() { return iq_; } private: const int iq_; }; VeryImportantPerson:: VeryImportantPerson(int iq) : iq_(iq) {}

14 Аргументы по умолчанию Аргументы по умолчанию можно использовать в конструкторах и методах класса как и в обычных функциях. Вы можете писать очень удобный код: String::String(const char * str = NULL) {... }

15 Конструкторы копирования Проще всего объяснить на примере: String::String(const String &str) { data_ = new char[str.length + 1]; strcpy(data_, str.chars()); length_ = str.length; }... String s1(A), s2(s1);

16 Друзья Друг класса это: –глобальная функция, –другой класс, –метод другого класса. Друг имеет доступ к private, protected и public членам класса. Если другом объявлен целый класс, то все его члены имеют доступ к private, protected и public членам текущего. "Настоящие программисты не используют друзей!"

17 Друзья class X { public: void MemberSetData (int b); private: int data_; }; void FriendSetData (X& x, int b) { x.data_ = b; } void X::MemberSetData (int b) { data_ = b; } int main() { X x; FriendSetData(x, 10); x.MemberSetData(10); return 0; }

18 Друзья class X { public: void MemberSetData (int b); private: int data_; }; void FriendSetData (X& x, int b) { // data_ имеет x.data_ = b; // уровень } // доступа private void X::MemberSetData (int b) { data = b; } int main() { X x; FriendSetData(x, 10); x.MemberSetData(10); return 0; }

19 Друзья class X { public: friend void FriendSetData (X& x, int b); void MemberSetData (int b); private: int data_; }; void FriendSetData (X& x, int b) { x.data_ = b; // Ok } void X::MemberSetData (int b) { data = b; } int main() { X x; FriendSetData(x, 10); x.MemberSetData(10); return 0; }

20 Друзья Функция (класс) не может стать другом другому классу, если это не указано в объявлении класса. Друзья могут использоваться для расширения public-интерфейса класса Друзья могут определяться в любой секции (public, private, protected).

21 Спасибо за внимание Вопросы?