Составители:
Рубрика:
19
m.ReadMas();
m.WriteMas();
}
Проблема здесь заключается в том, что для класса не предусмотрена защита
от некорректных вызовов методов, и метод чтения массива ReadMas может быть
вызван еще до инициализации массива, то есть без выделения памяти под него.
Это обязательно в дальнейшем приведет к потере данных. Таким образом, можно
сказать, что для данного класса не продуман
как следует интерфейс, который бы
обеспечивал целостность объекта при любых операциях с ним.
Решением проблемы могло бы стать введение дополнительного члена
данных, который своим значением определял, проинициализирован ли массив
или нет. Переопределим класс array:
//Листинг 5. Решение проблемы некорректности интерфейса класса введением дополнительного
//компонентного данного
struct array
{ int *mas, n;
int present;
void InitMas(int k)
{if (!present)
{if (k>0)
{ n=k;
mas=new int[n];
present=1;
}
}
else cout<<”Память уже выделена”;
}
void DelMas() //функция уничтожения массива
{if (present)
{ n=0;
delete []mas;
present=0;
}
else cout<<”Память не была выделена”;
}
void ReadMas() //функция ввода массива в клавиатуры
{if(present)
{ cout<<"Ввод массива";
for (int i=0;i<n;i++)
cin>>mas[i];
}
else cout<<”Ошибка! Память под массив не выделена”;
m.ReadMas(); m.WriteMas(); } Проблема здесь заключается в том, что для класса не предусмотрена защита от некорректных вызовов методов, и метод чтения массива ReadMas может быть вызван еще до инициализации массива, то есть без выделения памяти под него. Это обязательно в дальнейшем приведет к потере данных. Таким образом, можно сказать, что для данного класса не продуман как следует интерфейс, который бы обеспечивал целостность объекта при любых операциях с ним. Решением проблемы могло бы стать введение дополнительного члена данных, который своим значением определял, проинициализирован ли массив или нет. Переопределим класс array: //Листинг 5. Решение проблемы некорректности интерфейса класса введением дополнительного //компонентного данного struct array { int *mas, n; int present; void InitMas(int k) {if (!present) {if (k>0) { n=k; mas=new int[n]; present=1; } } else cout<<”Память уже выделена”; } void DelMas() //функция уничтожения массива {if (present) { n=0; delete []mas; present=0; } else cout<<”Память не была выделена”; } void ReadMas() //функция ввода массива в клавиатуры {if(present) { cout<<"Ввод массива"; for (int i=0;i>mas[i]; } else cout<<”Ошибка! Память под массив не выделена”; 19
Страницы
- « первая
- ‹ предыдущая
- …
- 17
- 18
- 19
- 20
- 21
- …
- следующая ›
- последняя »