ВУЗ:
Составители:
Рубрика:
программе и к зависанию системы.А если учесть,что эта опера-
ция используется и для инициализации объекта при его опреде-
лении,когда вызывается конструктор по умолчанияю для такого
же побитового копирования составного объекта,то последствия
от неправильного использования операции "=" могут быть еще
более разрушительными.Чтобы избежать всего этого,необходи-
мо:
1)для рассматриваемого составного типа Х ввести конструк-
тор вида Х(Х&), осуществляющий построение нового объекта по
ссылке на уже созданный;лишь в частном случае,это построение
может свестись к побитовому копированию,когда такое копиро-
вание допустимо;
2)для операции присваивания в составном типе вводят функ-
цию,которая задает этой операции новую семантику;очень час-
то определяемое присваивание сначала удаляет объект слева
от знака присваивания,а затем заменяет его копией объекта
справа от этого знака.
Приведем несколько примеров.
struct string /*-строка символов с указателем ее длины; */
{ char* p; /*-указатель на строку символов; */
int size;/*-число символов в строке; */
string(int sz) {p=new char[size=sz];}/*-констру-*/
~string() {delete p;}/* ктор и деструктор; */
};/*-конец определения структуры строка; */
void asgerr1(void)/*-ошибка в операции присваивания: */
{ string s1(10);/*-строка из 10 символов; */
string s2(20);/*-строка из 20 символов; */
s1=s2;/*-побитовое копирование структуры s1 и s2; */
}/*-конец определения 1-го примера с ошибкой; */
Введем в определение структуры собственнную операцию при-
сваивания:
struсt string /*-строка символов с указателем ее длины; */
{ char* p; /*-указатель на строку символов; */
29
программе и к зависанию системы.А если учесть,что эта опера- ция используется и для инициализации объекта при его опреде- лении,когда вызывается конструктор по умолчанияю для такого же побитового копирования составного объекта,то последствия от неправильного использования операции "=" могут быть еще более разрушительными.Чтобы избежать всего этого,необходи- мо: 1)для рассматриваемого составного типа Х ввести конструк- тор вида Х(Х&), осуществляющий построение нового объекта по ссылке на уже созданный;лишь в частном случае,это построение может свестись к побитовому копированию,когда такое копиро- вание допустимо; 2)для операции присваивания в составном типе вводят функ- цию,которая задает этой операции новую семантику;очень час- то определяемое присваивание сначала удаляет объект слева от знака присваивания,а затем заменяет его копией объекта справа от этого знака. Приведем несколько примеров. struct string /*-строка символов с указателем ее длины; */ { char* p; /*-указатель на строку символов; */ int size;/*-число символов в строке; */ string(int sz) {p=new char[size=sz];}/*-констру-*/ ~string() {delete p;}/* ктор и деструктор; */ };/*-конец определения структуры строка; */ void asgerr1(void)/*-ошибка в операции присваивания: */ { string s1(10);/*-строка из 10 символов; */ string s2(20);/*-строка из 20 символов; */ s1=s2;/*-побитовое копирование структуры s1 и s2; */ }/*-конец определения 1-го примера с ошибкой; */ Введем в определение структуры собственнную операцию при- сваивания: struсt string /*-строка символов с указателем ее длины; */ { char* p; /*-указатель на строку символов; */ 29
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »