Составители:
Рубрика:
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
- …
- следующая ›
- последняя »
