Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 лабораторная рабта

.doc
Скачиваний:
15
Добавлен:
07.02.2015
Размер:
100.35 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

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

«Чувашский государственный университет имени И.Н. Ульянова»

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

«Классы и объекты в С++»

Отчет

Вариант 7

Преподаватель: Мытникова Екатерина Анатольевна

Выполнил: Петров Александр, ДиКТ-31-11

Чебоксары 2013

1. Задание

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

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

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

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

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

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

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

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

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

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

2. Код программы

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

Выполнил: Петров Александр, ДиКТ-31-11*/

#include "stdafx.h"

#include <iostream>

#include <cstring>

class MyString

{

private:

size_t length;

char *str;

public:

MyString ();

MyString (const char *c);

MyString (const MyString& t);

~MyString ();

MyString& operator= (const MyString& t);

MyString operator+ (const MyString& t) const;

MyString operator+ (const char *c) const;

bool operator== (const MyString& t) const;

bool operator!= (const MyString& t) const;

bool operator< (const MyString& t) const;

bool operator<= (const MyString& t) const;

bool operator> (const MyString& t) const;

bool operator>= (const MyString& t) const;

void operator+= (const MyString& t);

char& operator[] (size_t i);

MyString operator() ( int i, int j );

friend std::ostream& operator<< (std::ostream& out, const MyString& t);

operator char* ()

{

return str;

}

};

MyString MyString::operator() ( int i, int j )

{

static char buf[ 100 ];

buf[ sizeof( buf ) - 1 ] = '\0';

strncpy( buf, str + i, j - i + 1 );

MyString ms( buf );

return ms;

}

MyString::MyString ()

{

length = 0;

str = NULL;

}

MyString::MyString (const char *c)

{

length = strlen (c) + 1;

str = new char[length];

strcpy (str, c);

str[length-1] = '\0';

}

MyString::MyString (const MyString& t)

{

length = strlen (t.str) + 1;

str = new char[length];

strcpy (str, t.str);

str[length-1] = '\0';

}

MyString::~MyString ()

{

if (str != NULL)

{

delete[] str;

}

}

MyString& MyString::operator= (const MyString& t)

{

length = strlen (t.str) + 1;

str = new char[length];

strcpy (str, t.str);

str[length-1] = '\0';

return *this;

}

MyString MyString::operator+ (const MyString& t) const

{

char* newStr = new char[strlen (str) + strlen (t.str) + 1];

strcpy (newStr, str);

strcat (newStr, t.str);

newStr[length-1] = '\0';

MyString returnObj (newStr);

delete[] newStr;

return returnObj;

}

bool MyString::operator== (const MyString& t) const

{

return (strcmp(str, t.str) == 0);

}

bool MyString::operator!= (const MyString& t) const

{

return (strcmp(str, t.str) != 0);

}

bool MyString::operator> (const MyString& t) const

{

return (strcmp(str, t.str) > 0);

}

bool MyString::operator>= (const MyString& t) const

{

return (strcmp(str, t.str) >= 0);

}

bool MyString::operator< (const MyString& t) const

{

return (strcmp(str, t.str) < 0);

}

bool MyString::operator<= (const MyString& t) const

{

return (strcmp(str, t.str) <= 0);

}

void MyString::operator+= (const MyString& t)

{

length = strlen (str) + strlen (t.str) + 1;

char *newStr = new char[length];

strcpy (newStr, str);

strcat (newStr, t.str);

strcpy (str, newStr);

str[length-1] = '\0';

delete[] newStr;

}

char& MyString::operator[] (size_t i)

{

return str[i];

}

std::ostream& operator<< (std::ostream& out, const MyString& t)

{

out << t.str;

return out;

}

int main()

{

MyString s1( "this is simple" ), s2( " text" );

char *str = ( char* )s1;

std::cout << "Test MyString to char* : " << str << std::endl;

s1 += s2;

std::cout << s1 << std::endl;

std::cout << "s[ 5 ] : " << s1.operator[]( 5 ) << std::endl;

std::cout << "s1: " << s1 << std::endl;

std::cout << "s2: " << s2 << std::endl;

std::cout << "s1 == s2 ? " << ( s1 == s2 ) << std::endl;

std::cout << "s1 != s2 ? " << ( s1 != s2 ) << std::endl;

std::cout << "s1 < s2 ? " << ( s1 < s2 ) << std::endl;

std::cout << "s1 <= s2 ? " << ( s1 <= s2 ) << std::endl;

std::cout << "s1 > s2 ? " << ( s1 > s2 ) << std::endl;

std::cout << "s1 >= s2 ? " << ( s1 >= s2 ) << std::endl;

std::cout << "s1( 4, 7 ) = " << s1( 4, 7 ) << std::endl;

return 0;

}

3. Скрин