2 лабораторная рабта
.docМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Чувашский государственный университет имени И.Н. Ульянова»
Лабораторная работа №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. Скрин