Использование указателей bc++, страница 8

В качестве примера реализации принципа информационной локализованности и использования директив условной компиляции сделаем ссылку на программу к лабораторной работе 12, в которой используется подключаемый файл пользователя “dvideo.h”, описывающий структуры CGA_RAM_ELEMENT, CGA_RAM и класс DIRECT_VIDEO. При модификации структур файл “dvideo.h” дорабатывается без изменений главной программы.

Примечание: При выполнении задания использовать материалы лекции 15. В разработанной программе должен соблюдаться стиль программирования, каждый раздел ее должен быть прокомментирован, программа должна носить индивидуальный характер. Отчет должен содержать титульный листок, постановку задачи, алгоритм ее решения, отлаженную программу на алгоритмическом языке и результаты расчета. На кафедру сдать отчет на бумажной основе, выполненный  в Word’e и исходный файл программы.

15. РАЗРАБОТКА КЛАССА ПОЛЬЗОВАТЕЛЯ

Цель работы:

·  Научиться разрабатывать простейшие классы пользователя;

·  Научиться пользоваться новым потоком ввода / вывода;

·  Научиться использовать манипуляторы при форматированном вводе / выводе.

Задание: Разработать собственный класс, в котором имеются закрытые и открытые переменные и функции, конструкторы и деструктор. Конструкторы должны инициализировать переменные различными способами. Использовать перегрузку функций и операций. Предусмотреть ввод / вывод  с использованием потока iostream с использованием манипуляторов. Предметная область может быть любая.

В качестве методической помощи приведем пример разработки  собственного класса myClass, содержащем два целых числа а и b, а также указатель на строку и число, содержащее длину строки. В классе осуществляется инициализация объектов myClass, ввод / вывод их с использованием нового потока ввода / вывода iostream, копирование и конкатенация объектов. Реализованы перегрузки функций и операций, использованы дружественные функции (friend), выполняется сравнение строк объектов. 

Примечание: Функции printf() и scanf() в программе не используются:

#include <iostream.h> // Класс разработан студентом группы 0ВМ-1 Сим Д.Б.

#include <conio.h>

#include <stdlib.h>

#include <string.h>

class myClass  // создание класса

{

private:     //  закрытые элементы класса

long a,b;

char *pString;  //  указатель на строку

int lenString;    //  длина строки

public:    //  открытые элементы класса

myClass();                    // конструктор по умолчанию

myClass(long, long, char *);  // конструктор из данных

myClass(const myClass &nmC);  // конструктор копирования

~myClass();                   // деструктор

void DigOut();                // функции-элементы

void StrOut();

// Перегрузка дружественных функций:

friend int operator==(myClass &, myClass &); // сравнения

friend myClass operator+(myClass &, myClass &); // сложения

friend ostream &operator<<(ostream &, myClass &);// оператора <<

friend istream &operator>>(istream &, myClass &);// оператора >>

};

myClass::myClass() { }  // конструктор по умолчанию

myClass::myClass(long newa,long newb,char *npString) // конструктор из данных

{

a=newa; b=newb;

pString=new char[strlen(npString)+1]; // выделение памяти для строки;

strcpy(pString, npString); // инициализация строки;

lenString=strlen(npString); // определение длины строки;

}

myClass::myClass(const myClass &nmC) // конструктор копирования

{

a=nmC.a;

b=nmC.b;

pString=new char[strlen(nmC.pString)+1]; // выделение памяти

lenString=strlen(nmC.pString); // определение длины строки;

strcpy(pString,nmC.pString);   // инициализация строки

}

myClass::~myClass()  // деструктор;

{

delete [] pString;  // удаление строки из памяти

}

void myClass::DigOut()

{

cout<<"Числа объекта:   "<<a<<", "<<b<<endl;

}

void myClass::StrOut()

{

cout<<"Строка объекта: "<<pString<<endl;

cout<<"Длина строки:   "<<lenString<<endl;