Класс TVector с перегруженными операциями



Хотелось бы при работе с массивом, т.е. классом TVector, иметь возможность использовать операцию [] доступа к элементу массива по индексу для того, чтобы получить значение элемента массива или модифицировать его. Совсем не вредно, чтобы при этом класс проверял корректность индекса с тем, чтобы не было попыток выхода за границы массива. Ну и еще хотелось бы иметь возможность вывода значений всех элементов массива с помощью стандартного потока cout. Все это, и многое другое, действительно возможно выполнить с помощью перегрузки операций. Для того чтобы все эти мечты воплотить в жизнь, надо в объявление класса (файл TVector.h) добавить такие описания:

Если перегруженную операцию включения вектора в поток вывода ostream Вы включаете в тело класса, т.е. в файл TVector.h, то не забудьте в начале этого файла добавить директиву using namespace std. Впрочем, если Вы этого не сделаете – не страшно: компилятор выдаст сообщение об ошибке, не понимая имени ostream.

В файл реализации класса TVector.срр остается добавить реализацию функции, выполняющей перегрузку операции доступа к элементам массива по индексу:

 

 

 

Теперь в программе, использующей данный класс, можно использовать выражения такого вида:

TVector MyVec(3,5,-1);

cout<<MyVec;// вывод всех элементов массива

MyVec[k]=12.3;// присваивание значения к-тому элементу массива

ElemType Val= MyVec[k];// получение значения к-того элемента массива

 

Если Вы внимательно посмотрите на функцию перегрузки операции [], то у Вас, наверное, возникнет вопрос: а что функция вернет, если индекс будет вне границ массива? А неизвестно что, т.е. случайное значение, что не есть хорошо. Ну и как же быть в этом случае? Приемлемым выходом является генерация исключительной ситуации (исключения), которую может перехватить вызывающая функция. Текст функции перегрузки операции [] можно в этом случае записать так:

 

В этом случае вызывающая функция может поступать таким образом:

Try

{

// …

MyVec[i]=0;

// …

}

catch(char * Mes)

{

   AfxMessageBox(Mes);

}

 

Если при вычислении выражения MyVec[i] индекс будет вне диапазона, выполнится оператор, указанный в блоке catch, т.е. в данном случае на дисплее будет показано окно с текстом "Bad index". Естественно, что в реальной программе для обработки такой ошибки надо реализовать что-то более целесообразное, чем вывод такого бестолкового сообщения несчастному юзеру Вашей программы.


Наследование классов

Если мысль не приходит в голову, она не приходит никуда

Виктор Шендерович

 

Цель работы – освоить разработку и использование классов-наследников для создания объектно-ориентированных программ (4 час.).

Задание

Разработайте базовый класс в соответствии с вашим вариантом задания, снабдите его конструктором с параметрами. Член-данные базового класса должны быть объявлены со спецификатором доступа protected. Для доступа к данным этого класса разработайте соответствующие функции чтения и записи их значений. Производный класс объявите со спецификатором доступа public:

class CBase {/**/};

class CChild: public CBase {/**/};

 

Разработайте производный класс в соответствии с вариантом задания. Снабдите его конструктором с параметрами, предназначенным для инициализации как член-данных базового класса, так и член-данных производного класса. В конструкторе производного класса вызовите конструктор базового класса.

При выполнении любого варианта задания предусмотреть такую реализацию программы, использующей разработанные вами классы, которая бы позволила убедиться в корректности реализации методов класса. В частности, во всех вариантах должна быть реализована (глобальная) функция вывода на монитор значений всех член-данных объектов.

Базовый и производный классы должны быть размещены в отдельных файлах (.h и .cpp).

В каждом варианте необходимо предусмотреть сохранение член-данных объектов в файле и чтение сохраненных данных из файла и присваивание их значений соответствующим член-данным объектам производного класса.

Варианты заданий приведены в табл.1. Разрешается выбрать свой вариант задания, но перед выполнением согласовать его содержание с преподавателем.

Методическая помощь

Очевидно, что в программе вам понадобится описать массив объектов класса и работать с ним. Допустим, вы сделали такие описания:


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

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






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