Содержание
-
5. Классы, использующие свободную память
1
-
5.1. Копирование объектов
class S { private: int n; Typearr[N]; public: S():n(0) {} S(int, …); . . . }; 2
-
5.1. Копирование объектов(продолжение)
S ob1(5); . . . { S ob2 = ob1; S ob3(3); ob3 = ob1; } . . . 3 n arr xxxxx 5 ob1 xxxxx 5 n arr ob2 xxxxx 5 n arr ob3 yyy 3
-
5.2. Динамические объекты
class S { private: int n; Type *ptr; public: S():n(0), ptr(NULL) { } S(int, …); ~S(){delete [ ] ptr;} }; 4
-
5.2. Динамические объекты(продолжение)
S::S(int k, …):n(k), ptr(new Type[k]) { //необходимая инициализация // выделенной области памяти . . . } 5
-
5.3. Проблемы
S ob1(5, …); . . . { S ob2 = ob1; S ob3(2, …); ob3 = ob1; } ob1 ??? 6 xxxxx n ptr ob2 n ptr ob3 n ptr ob1 5 5 5 ??? 2 tt ???
-
5.4. Копирующий конструктор
выделение памяти копирование данных S::S(const S &ob):n(ob.n), ptr(NULL) { if(n){ ptr = new Type[n]; // копирование данных } } 7
-
5.5. Оператор присваивания
освобождение памяти выделение новой памяти копирование данных проверка ситуации a = a 8
-
5.5. Оператор присваивания(продолжение)
S & S::operator = (const S& ob) { if(this != &ob) { // проверка a = a delete [ ] ptr; ptr = NULL; if((n = ob.n) != 0) { ptr = new Type[n]; // копирование данных } } return *this; } 9
-
5.6. Использование
S a1(3, …), a2; a2 = a3; // присваивание S a3(a1); // копирующий конструктор S a4 = a1; // копирующий конструктор 10
-
5.6. Использование(продолжение)
S func (S p) { S a(p); . . . return a; } . . . a2 = func(a3); // передача аргумента // возврат результата 11 // S func(const S &p)
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.