Class CMyTrouble: public CMyLove



{

       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ГБ. Найдете выход?

Описание самых легких вариантов заданий

Таблица 1.

Варианты заданий

№ вар. Задание
1 Базовый класс КОМНАТА с член-данными ширина, длина и высота. Производный класс ОДНОКОМНАТНАЯ КВАРТИРА с комнатой, кухней ФИО владельца и номером квартиры. Для кухни задать площадь. 
2 Базовый класс ЛЕТАТЕЛЬНЫЙ АППАРАТ с член-данными вес, максимальные высота и скорости (горизонтальная и вертикальная) полета. Производный класс ПАССАЖИРСКИЙ САМОЛЕТ с член-данными марка, число пассажиров, дальность полета, количество салонов.
3 Базовый класс ДВИГАТЕЛЬ с член-данными тип двигателя (дизельный, бензиновый, электрический, комбинированный), фирма-производитель, объем и мощность двигателя. Производный класс ЛЕГКОВОЙ АВТОМОБИЛЬ с член-данными марка, число мест, максимальная скорость.
4 Базовый класс МАССИВ с член-данными вещественный массив и число его элементов. Массив описать как имеющий конкретное число элементов, заданное с помощью перечисления enum. Производный класс СТЕК с член-данным число элементов в стеке. Методы производного класса должны позволять помещать данные в стек, извлекать их, проверять наличие в стеке свободной памяти.
5 Базовый класс ЖИДКОСТЬ с член-данными название, удельный вес и условная вязкость. Производный класс БЕЗАЛКОГОЛЬНЫЙ НАПИТОК с член-данными цвет, вкус (горький, сладкий, кислый и т.д.), объем расфасовки и цена. Примечание: Условная вязкость — величина, косвенно характеризующая гидравлическое сопротивление течению, измеряемая временем истечения заданного объёма жидкости через вертикальную трубку определённого диаметра. Измеряют в градусах Энглера (по имени немецкого химика К. О. Энглера), обозначают — °ВУ. Определяется отношением времени истечения 200 см3 испытываемой жидкости при данной температуре из специального вискозиметра ко времени истечения 200 см3 дистиллированной воды из того же прибора при 20 °С.
6 Базовый класс ЧЕЛОВЕК с член-данными вес, рост, раса. Производный класс ЖЕНЩИНА с член-данными имя, объем груди, талии и бедер.
7 Базовый класс ПРОЦЕССОР с член-данными марка, тактовая частота, объем кэш-памяти. Производный класс КОМПЬЮТЕР с член-данными марка, число процессоров, объем оперативной памяти.
8 Базовый класс РАМКА с член-данными координаты левого верхнего и правого нижнего угла, заголовок. Производный класс ОКНО с член-данными меню (строка символов) и число тем меню, наличие инструментальной панели и строки статуса.
9 Базовый класс ХОМО САПИЕНС с член-данными возраст и цвет волос. Производный класс СТУДЕНТ с член-данными ФИО, пол, специальность, курс обучения.
10 Базовый класс ВЕКТОР с член-данными указатель на целочисленный тип данных, его размер и фактическое число элементов. Предоставить метод заполнения элементов массива. Производный класс МАССИВ с член-данными максимальное, минимальное и среднее значения элементов вектора. Разработать метод производного класса, который должен выполнять сортировку элементов массива в заданном порядке.
11 Базовый класс АВТОМОБИЛЬ с член-данными марка, цвет, объем и мощность двигателя. Производный класс ГРУЗОВИК с член-данными длина и ширина кузова, грузоподъемность.
12 Базовый класс РАБОТНИК с член-данными ФИО, идентификационный код, возраст. Производный класс ИНЖЕНЕР с член-данными специальность, месячный оклад, место работы
13 Базовый класс ПЕЧАТНОЕ ИЗДАНИЕ с член-данными число страниц, язык издания, наличие иллюстраций. Производный класс УЧЕБНИК с член-данными название, область знаний, тираж, цена экземпляра.

 


Дата добавления: 2018-02-18; просмотров: 531; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!