Описания членов — данных пользовательских классов
⦁ Определить пользовательский класс в соответствии с вариантом задания (смотри приложение).
⦁ Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.
⦁ Определить в классе деструктор.
⦁ Определить в классе компоненты-функции для просмотра и установки полей данных.
⦁ Определить указатель на компоненту-функцию.
⦁ Определить указатель на экземпляр класса.
⦁ Написать демонстрационную программу, в которой создаются и разрушаются объекты пользовательского класса и каждый вызов конструктора и деструктора сопровождается выдачей соответствующего сообщения (какой объект какой конструктор или деструктор вызвал).
⦁ Показать в программе использование указателя на объект и указателя на компоненту-функцию.
КАТАЛОГ ЭВМ
тип процессора – char*
тактовая частота – float
объем оп. памяти – int
емкость винчестера – float
Описания членов — данных пользовательских классов
Помогите пожалуйста ЖИВОТНОЕ имя – char* класс – char* средний вес – int 2.Постановка.
КЛАССЫ И ОБЪЕКТЫ В С++. Описания членов — данных пользовательских классов
Помогите пожалуйста, совсем не понимаю как это делать. КЛАССЫ И ОБЪЕКТЫ В С++ Порядок.
Описание полей данных пользовательских классов
Библиотека имя – String автор – String стоимость – float
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
#include #include #include using namespace std; class EVM { char *CpType; float ClockRate; int Memory; float Capacity; public: EVM(); // Конструктор без параметров EVM (char*,int,float,float); // Конструктор с параметрами EVM (const EVM&); // Конструктор копирования ~EVM (); // Деструктор char * GetCpType() ; // Функция получения типа процессора int GetMemory(); // Функция получения объема оп.памяти float GetClockRate(); // Функция получения тактовой частоты float GetCapacity(); // Функция получения емкости винчестера void SetCpType(char*); // Функция изменения типа процессора void SetMemory(int); // Функция изменения объема оп.памяти void SetCapacity(float); // Функция изменения емкости винчестера void SetClockRate(float); // Функция изменения тактовой частоты void Show(); // Функция показа всех параметров }; EVM::EVM() { cout "\nКонструктор без параметров вызван для объекта. " this endl; CpType = new char('\0'); ClockRate = 0; Memory = 0; Capacity = 0; } EVM::EVM(char *cp, int mem, float rate,float capa) { cout "\nКонструктор c параметрами вызван для объекта. " this endl; CpType = new char[strlen(cp) + 1]; strcpy(CpType, cp); Memory = mem; Capacity = capa; ClockRate = rate; } EVM::EVM(const EVM & x) { cout "\nКонструктор копирования вызван для объекта. " this endl; CpType = new char[strlen(x.CpType) + 1]; strcpy(CpType, x.CpType); Memory = x.Memory; Capacity = x.Capacity; ClockRate = x.ClockRate; } EVM::~EVM() { cout "\nВызов деструктора. " this endl; delete [] CpType; } char * EVM::GetCpType() { return CpType; } int EVM::GetMemory() { return Memory; } float EVM::GetClockRate() { return ClockRate; } float EVM::GetCapacity() { return Capacity; } void EVM::SetCpType(char *s) { delete[] CpType;//Удаляем прошлую выделенную память CpType = new char[strlen(s) + 1]; strcpy(CpType, s); } void EVM::SetMemory(int x) { Memory = x; } void EVM::SetCapacity(float x) { Capacity = x; } void EVM::SetClockRate(float x) { ClockRate = x; } void EVM::Show() { cout "Тип процессора =" CpType endl; cout "Обьем оп.памяти =" Memory endl; cout "Тактовая частота =" ClockRate endl; cout "Емкость винчестера =" Capacity endl; } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); void (EVM::*ptrF)(); // Инициализируем указатель ptrF=&EVM::Show; EVM(); // Конструктор без параметров, инициализация переменых EVM one("Тип1",2,75,8.4); // Конструктор с параметрами EVM two=one; // Конструктор копирования two.Show(); // Вывод все параметров one.SetMemory(one.GetMemory() + 1);//Увеличиваем значение памяти на 1 one.SetClockRate(one.GetClockRate() + 2.5);//Увеличиваем значение тактовой частоты на 2,5 one.SetCapacity(one.GetCapacity() + 15);//Увеличиваем значение объема винчестера на 15 char str[81]; strcpy(str, one.GetCpType()); strcat(str, "+");//Добавляем + к типу процессора one.SetCpType(str); (one.*ptrF)();// Вызов функции Show через указатель EVM *ptrO = new EVM("Тип2",8,60,128);//Создаем указатель на обьект ptrO->Show(); delete ptrO;//Освобождаем память на которую указывал ptrO system("PAUSE"); return 0; }
Источник
ЛАБОРАТОРНАЯ РАБОТА КЛАССЫ И ОБЪЕКТЫ В С++
Цель. Получить практические навыки реализации классов на С++.
Основное содержание работы.
Написать программу, в которой создаются и разрушаются объекты, определенного пользователем класса. Выполнить исследование вызовов конструкторов и деструкторов.
Краткие теоретические сведения.
Класс фундаментальное понятие С++, он лежит в основе многих свойств С++. Класс предоставляет механизм для создания объектов. В классе отражены важнейшие концепции объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм.
С точки зрения синтаксиса, класс в С++ это структурированный тип, образованный на основе уже существующих типов.
В этом смысле класс является расширением понятия структуры. В простейшем случае класс можно определить с помощью конструкции:
тип_класса – одно из служебных слов class, struct, union;
имя_класса – идентификатор;
список_членов_класса – определения и описания типизированных данных и принадлежащих классу функций.
Функции – это методы класса, определяющие операции над объектом.
Данные – это поля объекта, образующие его структуру. Значения полей определяет состояние объекта.
void set(int,int,int); // метод – установить дату
void get(int*,int*,int*); // метод – получить дату
void next(); // метод – установить следующую дату
void print(); // метод – вывести дату>;
struct class complex // комплексное число
Для описания объекта класса (экземпляра класса) используется конструкция
имя_класса имя_объекта;
date *point = &today; // указатель на объект типа date
date clim[30]; // массив объектов
В определяемые объекты входят данные, соответствующие членам данным класса. Функции члены класса позволяют обрабатывать данные конкретных объектов класса. Обращаться к данным объекта и вызывать функции для объекта можно двумя способами. Первый с помощью “квалифицированных” имен:
имя_объекта. имя_данного
имя_объекта. имя_функции
Второй способ доступа использует указатель на объект
указатель_на_объект–>имя_компонента
complex *point = &x1; // или point = new complex;
Доступность компонентов класса.
В рассмотренных ранее примерах классов компоненты классов являются общедоступными. В любом месте программы, где “видно” определение класса, можно получить доступ к компонентам объекта класса. Тем самым не выполняется основной принцип абстракции данных – инкапсуляция (сокрытие) данных внутри объекта. Для изменения видимости компонент в определении класса можно использовать спецификаторы доступа: public, private, protected.
Общедоступные (public) компоненты доступны в любой части программы. Они могут использоваться любой функцией как внутри данного класса, так и вне его. Доступ извне осуществляется через имя объекта:
имя_объекта.имя_члена_класса
ссылка_на_объект.имя_члена_класса
указатель_на_объект->имя_члена_класса
Собственные (private) компоненты локализованы в классе и не доступны извне. Они могут использоваться функциями – членами данного класса и функциями – “друзьями” того класса, в котором они описаны.
Защищенные (protected) компоненты доступны внутри класса и в производных классах.
Изменить статус доступа к компонентам класса можно и с помощью использования в определении класса ключевого слова class. В этом случае все компоненты класса по умолчанию являются собственными.
double re, im; // private по умолчанию
Недостатком рассмотренных ранее классов является отсутствие автоматической инициализации создаваемых объектов. Для каждого вновь создаваемого объекта необходимо было вызвать функцию типа set (как для класса complex) либо явным образом присваивать значения данным объекта. Однако для инициализации объектов класса в его определение можно явно включить специальную компонентную функцию, называемую конструктором. Формат определения конструктора следующий:
имя_класса(список_форм_параметров)
Имя этой компонентной функции по правилам языка С++ должно совпадать с именем класса. Такая функция автоматически вызывается при определении или размещении в памяти с помощью оператора new каждого объекта класса.
сomplex(double re1 = 0.0,double im1 = 0.0)
Конструктор выделяет память для объекта и инициализирует данные члены класса.
Конструктор имеет ряд особенностей:
- Для конструктора не определяется тип возвращаемого значения. Даже тип void не допустим.
- Указатель на конструктор не может быть определен, и соответственно нельзя получить адрес конструктора.
- Конструкторы не наследуются.
- Конструкторы не могут быть описаны с ключевыми словами virtual, static, const, mutuable, valatile.
- cpp-файл с реализацией класса,
- сpp-файл демонстрационной программы.
Источник