{
char *LoverName;
public :
CMyTrouble():CMyLove()
{/**/}
CMyTrouble(char * iName, int iSome):CMyLove(iSome)
{/**/}
// ...
};
// ...
const int Max=20;
CMyTrouble List [20]; /*Так можно описать массив объектов только в том случае, если в классе определен конструктор без параметров */
// ...
Теперь, когда вы будете помещать объект в массив List с помощью внешне безобидного оператора
List[i]=CMyTrouble(SomeName, iNum);
то столкнетесь с определенными неприятностями, если, как в данном примере, среди член-данных есть указатели. Эти неприятности вызваны тем, что при выполнении указанного оператора будут вызываться деструктор, конструктор копирования и собственно операция присваивания. Вследствие того, что реализации деструктора, конструктора копирования и операции присваивания «по умолчанию» в данном случае неприменимы, вам придется их реализовывать самостоятельно, что само по себе, конечно, полезно, но «морочливо». Конечно, если вы их разработаете, то можете просить у преподавателя дополнительные баллы за свой «сугубо индивидуальный» труд.
Другим выходом является использование массива указателей на объекты:
const int Max=20;
CMyTrouble *List[20];
// ...
Теперь можно помещать объект в массив List с помощью оператора
List[i]=new CMyTrouble(SomeName, iNum);
В таком случае вам можно обойтись без перегрузки операции присваивания и конструктора копирования, хотя деструктор придется разработать, ничего не поделаешь. Кроме того, надо не забыть выполнить освобождение памяти от объектов в массиве List.
Еще одно замечание, касающееся использования символов кириллицы. Если файл с исходными данными ваших объектов вы создавали с помощью редактора среды MVS или блокнота, то символы кириллицы записаны в кодировке Windows. У вас не будет проблем с символами кириллицы, если вы в своей программулине вызовите хвункцию
setlocale ( LC _ ALL , " Rus ");
Но, когда вы в программе будете вводить символы кириллицы с помощью потока cin, то вы их получите в кодировке DOS, а не Windows. Тогда при записи таких символов в файл надо использовать, например, такую функцию
char Buff[1024];
char * Rus(char *Str)
{
OemToCharA(Str,Buff);
return Buff;
}
В качестве иллюстрации этого обстоятельства обратите внимание на следующий непростой случай записи данных в файл:
char FName[20], SName[20];
cout <<"Введи имя>";
cin>>FName;
cout<<" Введи фамилию >" ;
cin >> SName ;
// запись данных в файл (out - объект ostream)
out<<Rus(FName)<<' '<<Rus(SName)<<' '<< /* и так далее */ ;
Когда вы посмотрите на содержимое файла, то обнаружите там, что имя и фамилия совпадают! Этот глюк исправить можно таким простым способом:
out<<Rus(FName)<<' '; out<<Rus(SName)<<' '<< /* и так далее */ ;
Если вы объясните причину такого явления, то можете через суд требовать от хвирмы Микрософт милльёны за глюк в их компиляторе, который вы купили за огромные деньжищи.
Кстати, еще один вопросец. Приведенная выше реализация функции Rus предполагает, что длина преобразуемой строки символов не превышает магического числа 1023. А если она будет больше, что делать? В принципе длина строки символов с завершающим нулем (тип char*) может иметь размер до 2ГБ. Найдете выход?
7.3. Описание самых легких вариантов заданий
Таблица 1.
Варианты заданий
№ вар. | Задание |
1 | Базовый класс КОМНАТА с член-данными ширина, длина и высота. Производный класс ОДНОКОМНАТНАЯ КВАРТИРА с комнатой, кухней ФИО владельца и номером квартиры. Для кухни задать площадь. |
2 | Базовый класс ЛЕТАТЕЛЬНЫЙ АППАРАТ с член-данными вес, максимальные высота и скорости (горизонтальная и вертикальная) полета. Производный класс ПАССАЖИРСКИЙ САМОЛЕТ с член-данными марка, число пассажиров, дальность полета, количество салонов. |
3 | Базовый класс ДВИГАТЕЛЬ с член-данными тип двигателя (дизельный, бензиновый, электрический, комбинированный), фирма-производитель, объем и мощность двигателя. Производный класс ЛЕГКОВОЙ АВТОМОБИЛЬ с член-данными марка, число мест, максимальная скорость. |
4 | Базовый класс МАССИВ с член-данными вещественный массив и число его элементов. Массив описать как имеющий конкретное число элементов, заданное с помощью перечисления enum. Производный класс СТЕК с член-данным число элементов в стеке. Методы производного класса должны позволять помещать данные в стек, извлекать их, проверять наличие в стеке свободной памяти. |
5 | Базовый класс ЖИДКОСТЬ с член-данными название, удельный вес и условная вязкость. Производный класс БЕЗАЛКОГОЛЬНЫЙ НАПИТОК с член-данными цвет, вкус (горький, сладкий, кислый и т.д.), объем расфасовки и цена. Примечание: Условная вязкость — величина, косвенно характеризующая гидравлическое сопротивление течению, измеряемая временем истечения заданного объёма жидкости через вертикальную трубку определённого диаметра. Измеряют в градусах Энглера (по имени немецкого химика К. О. Энглера), обозначают — °ВУ. Определяется отношением времени истечения 200 см3 испытываемой жидкости при данной температуре из специального вискозиметра ко времени истечения 200 см3 дистиллированной воды из того же прибора при 20 °С. |
6 | Базовый класс ЧЕЛОВЕК с член-данными вес, рост, раса. Производный класс ЖЕНЩИНА с член-данными имя, объем груди, талии и бедер. |
7 | Базовый класс ПРОЦЕССОР с член-данными марка, тактовая частота, объем кэш-памяти. Производный класс КОМПЬЮТЕР с член-данными марка, число процессоров, объем оперативной памяти. |
8 | Базовый класс РАМКА с член-данными координаты левого верхнего и правого нижнего угла, заголовок. Производный класс ОКНО с член-данными меню (строка символов) и число тем меню, наличие инструментальной панели и строки статуса. |
9 | Базовый класс ХОМО САПИЕНС с член-данными возраст и цвет волос. Производный класс СТУДЕНТ с член-данными ФИО, пол, специальность, курс обучения. |
10 | Базовый класс ВЕКТОР с член-данными указатель на целочисленный тип данных, его размер и фактическое число элементов. Предоставить метод заполнения элементов массива. Производный класс МАССИВ с член-данными максимальное, минимальное и среднее значения элементов вектора. Разработать метод производного класса, который должен выполнять сортировку элементов массива в заданном порядке. |
11 | Базовый класс АВТОМОБИЛЬ с член-данными марка, цвет, объем и мощность двигателя. Производный класс ГРУЗОВИК с член-данными длина и ширина кузова, грузоподъемность. |
12 | Базовый класс РАБОТНИК с член-данными ФИО, идентификационный код, возраст. Производный класс ИНЖЕНЕР с член-данными специальность, месячный оклад, место работы |
13 | Базовый класс ПЕЧАТНОЕ ИЗДАНИЕ с член-данными число страниц, язык издания, наличие иллюстраций. Производный класс УЧЕБНИК с член-данными название, область знаний, тираж, цена экземпляра. |
Дата: 2019-07-30, просмотров: 253.