Контрольная работа по "Программированию на языке СИ++"

Автор работы: Пользователь скрыл имя, 21 Мая 2013 в 21:26, контрольная работа

Описание

Цель. Получить практические навыки реализации классов на C++.
Основное содержание работы. Написать программу, в которой создаются и разрушаются объекты, определенного пользователем класса «Цех». Выполнить исследование вызовов конструкторов и деструкторов.
Порядок выполнения работы.
1.Определить пользовательский класс в соответствии с вариантом задания (смотри приложение).
2.Определить в классе следующие конструкторы: без параметров, с параметрами, копирования.

Работа состоит из  1 файл

Отчет.doc

— 107.50 Кб (Скачать документ)

Министерство образования и науки

Сарапульский политехнический институт (филиал)

Государственного образовательного учреждения

Высшего профессионального  образования

«Ижевский государственный  технический университет»

 

Кафедра КИПР

 

 

 

 

 

КОНТРОЛЬНАЯ РАБОТА

по дисциплине: Программирование на языке СИ++

 

 

 

 

 

 

Выполнит студент группы 261ЗДУ                               Пастухов Р.В.

 

Проверил преподаватель                       Максимов М. В.

 

 

 

 

 

 

 

 

 

Сарапул 2010

 

Лабораторная работа №1.

 

Цель. Получить практические навыки реализации классов на C++.

Основное содержание работы.

Написать программу, в  которой создаются и разрушаются  объекты, определенного пользователем класса «Цех». Выполнить исследование вызовов конструкторов и деструкторов.

Порядок выполнения работы.

1.Определить пользовательский  класс в соответствии с вариантом  задания (смотри приложение).

2.Определить в классе  следующие конструкторы: без параметров, с параметрами, копирования.

3.Определить в классе  деструктор.

4.Определить в классе  компоненты-функции для просмотра и установки полей данных.

5.Определить указатель  на компоненту-функцию.

б.Определить указатель  на экземпляр класса.

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

8.Показать в программе  использование указателя на объект  и указателя на компоненту-функцию.

 

 Приложение 1 Файл ceh.h

 

#ifndef ceh_h

#define ceh_h

class ceh{//Объявление цеха

public:

ceh();//Конструктор без параметров

cehf(char *n1, char *n2, int n3);//Конструктор  с параметрами

ceh(const ceh& op2);//Конструктор копирования

~ceh();

ceh& operator=(const ceh& op2);//Оператор присваивания (аналогично копированию) х=у

void  show();//Функция вывода  на  экран 

void  input();//Функция ввода

private:

char name[25], nach[25];//Имя и начальник

int num;//Количество работающих

};

#endif

 

 

Файл ceh.cpp

 

#include "ceh.h"

#include <string>

ceh::ceh(){//Конструктор без параметров ceh x;

printf("Call constructor\n");

this->name[0] = NULL; this->nach[0] = NULL; this->num =0;

}

ceh::ceh(char *n1, char *n2, int n3){//Конструктор  с параметрами ceh x(...)

strcpy(this->name, n1); strcpy(this->nach, n2); this->num = n3;

}

ceh::ceh(const ceh& op2){//Конструктор  копирования 

ceh x = у

strcpy(this->name, op2.name); strcpy(this->nach, op2.nach); this->num = op2.num;

}

ceh::~ceh(){//Деструктор

printf("Call destructor\n");

}

ceh& ceh::operator = (const ceh& op2){//Оператор присваивания (аналогично копированию) х = y

strcpy(this->name, op2.name); strcpy(this->nach, op2.nach); this->num = op2.num;

return *this;

}

void ceh::show(){//Вывод на экран

printf("Name: %s\nNach: %s\nNumber of workers: %i\n\n",this->name, this->nach,

this->num);

}

void ceh::input(){//3aпись данных

printf("Input name: "); scanf("%s",this->name); printf("Input nach: "); scanf("%s",this->nach);

printf("Input number: "); scanf("%i",&this->num);

}

 

 

Приложение 2 Файл.срр

 

#include "ceh.h"

ceh c1; //Вызов конструктора без  параметров

ceh c2("Avia", "Gorbunov", 150); //Вызов  конструктора с параметрами 

ceh с3[3] = {ceh(“Mulitary", "Popov", 140), ceh("HQ","Ovechkin",132), ceh("System", "Himkin"., 164)};

ceh c4 = c2; //Вызов конструктора копирования

void main(){

ceh *c = new ceh[2];// Массив цех размещается  в динамической памяти

c1.input();

c1.show();

c3[1].show();

с[0] = сЗ[2];с[1] = с4;

c[1].show();//Использование указателя  на функцию 

void (ceh::*pf)();

pf=&ceh::show;

c3[0].*pf)();//Вызов функции

}

 

 

Лабораторная работа №2

 

Цель. Получить практические навыки создания иерархии классов и  использования статических компонентов класса.

Основное содержание работы.

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

Порядок выполнения работы.

1.Определить иерархию  классов (в соответствии с вариантом).

2.Определить в классе  статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка.

3.Реализовать классы.

4.Написать демонстрационную  программу, в которой создаются  объекты различных классов и  помещаются в список, после чего  список просматривается.

5.Сделать соответствующие методы не виртуальными и посмотреть, что будет.

6.Реализовать вариант,  когда объект добавляется в  список при создании, т.е. в  конструкторе.

Перечень классов: квитанция, накладная, документ, чек

 

Приложение 1 Файл document.h

 

#ifndef document_h

#define document_h

class document{//Базовый класс

public:

virtual void add() = 0;//Чистая виртуальная  функция добавления элемента  в список

virtual void show() = 0;//Чистая виртуальная  функция просмотра элемента списка static document *begin;//Указaтeль на начало списка

static void print();//Статическая функция  для просмотра списка

protected:

char name[25];

document  *пеxt;//Указатель на следующий  элемент в списке

};

class kvit:  virtual public document{//Производный  класс квитанция 

public:

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

kvit(char *n,  int s);

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

virtual ~kvit();// виртуальный деструктор

void add();

void show();// чистая виртуальная функция 

private:

int sum;//Количество мест

};

class nakl: virtual public document{//Производный класс накладная

public:

nakl();

nakl(char *n, int s);

nakl(const nakl& tmp);

virtual ~nakl();

void add();

void show();

private:

int sum;

};

class check: virtual public document{//Производный  класс чек 

public:

check();

check(char *n, int s);

check(const check& tmp);

virtual ~check();

void add();

void show();

private:

int sum;

};

#endif

 

Файл document.cpp

 

#include "document.h"

#include <stdio.h>

#include <string.h>

kvit::kvit(char *n,  int s){

strcpy(this->name, n); this->sum = s;

}

kvit::kvit(const kvit& tmp){

strcpy(this->name, tmp.name); this->sum = tmp.sum;

}

kvit::~kvit(){

}

void kvit: :аdd(){//Добавление  элемента в список

this->next - document::begin; //2 элементом  в списке является текущее  начало 

document::begin = this; //Задаем новое начало списка

}

void kvit::show(){//Вывод на экран  документа

printf("Name: %s\nSum: %i\n\n",this->name, this->sum);

}

nakl::nakl(char *n, int s){

strcpy(this->name, n); this->sum = s;

}

nakl::nakl(const nakl& tmp){

strcpy(this->name, tmp.name); this->sum = tmp.sum;

}

nakl::~nakl(){

}

void nakl::add(){

this->next = document::begin;

document::begin = this;

}

void nakl::show(){

printf("Name: %s\nSum: %i\n\n",this->name> this->sum);

}

check::check(char *n, int s){

strcpy(this->name, n); this->sum - s;

}

check::check(const checks tmp){

strcpy(this->name, tmp.name); this->sum = tmp.sum;

}

check::~check(){

}

void check::add(){

this->next = document::begin;

document::begin = this;

}

void check::show(){

printf("Name: %s\nSum: %i\n\n",this->name, this->sum);

}

 

 

Приложение 2 Файл.срр

 

#include "document.h"

document *document::begin = 0;//Инициализация вне  класса

void document: :print(){//Просмотр списка 

document *tmp = document::begin;

while(tmp){//Пока не найден конец  списка

tmp->show();//Выводим на экран

tmp = tmp->next;

}

}

void main(){

check d1("IzhCom",125);  nakl d2("SPI",150);  kvit d3("MVD",300);

d1.add;(); d2.add(); d3.add();//Добавление в  список 

document::print();//Просмотр списка

 

Лабораторная работа №5

 

Цель. Получить практические навыки работы в среде ВС++5.02 и создания EasyWin программы. Получить практические навыки создания абстрактных типов данных и перегрузки операций в языке C++.

Основное содержание работы.

Определить и реализовать класс set - абстрактный тип данных. Определить и реализовать операции над данными этого класса. Написать и выполнить EasyWin программу полного тестирования этого класса.

Порядок выполнения работы.

1 .Выбрать класс АТД в соответствии  с вариантом.

2.Определить и реализовать в  классе конструкторы, деструктор, функции Input (ввод с клавиатуры) и Рrint (вывод на экран), перегрузить операцию присваивания.

3.Написать программу тестирования  класса и выполнить тестирование.

4.Дополнить определение класса  заданными перегруженными операциями (в соответствии с вариантом).

5.Реализовать эти операции. Выполнить  тестирование.

 

Приложение 1. Файл set_int.h

 

#include<malloc.h>

#include<stdio.h>

class set{//Множество

public:

set(){

            thls->current_size=0;//Устанавливаем размер  множества равным 0

           this->mas=(int*)malloc(sizeof(int));

  }

  set(int n,  ...){

              int *p=&n, *tmp, i;

               this->max_size = 5; this->current_size=0;

                //Для дальнейшего изменения размера  массивов через realloc используем процедуру malloc

              mas = (int*)malloc(sizeof(int));

              tmp = (int*)malloc(sizeof(int));

              //Считываем все

                 While(*p){

                           if(this->current_size){

                                    tmp=(int*)realloc(&tmp[0],(this->current_size+1)*sizeof(int));//Изменяем размер временного массива

                              for(i=0;i<this->current_size;i++) tmp[i]=this->mas[i];//3aписываем  во временный массив данные

                               tmp[this->current_size]=(*р);//3аписываем                                              

                           mas=(int*)realloc(&mas[0],(this->currerrt_size+1)*sizeof(int));

                              for(i=0;i<this->current_size+i;i++) this->m3s[i] current_size++;

} else this->mas[this->current_size++]=(*p);

p++;

     }

     free(&tmp[0]);

}

set(const set& tmp){//Копирование

            this->current_size=tmp.current_size;

            this->mas=(int*)realloc(&mas[0],(this->current_size)*sizeof(int));

   for(int i=0;i<this->current_size;i++)

this->mas[i]=tmp.mas[i];

   this->max_size=tmp.max_size;

}

set& operator=(const set& tmp){//Присваивание

   if(this==&tmp) return *this;

   this->current_size = tmp.current_size;

Информация о работе Контрольная работа по "Программированию на языке СИ++"