Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга C++.doc
Скачиваний:
24
Добавлен:
10.11.2019
Размер:
2.48 Mб
Скачать

Домашнее задание

  1. Разработать класс Person, который содержит соответствующие члены для хранения:

    • имени,

    • возраста,

    • пола и

    • телефонного номера.

Напишите функции-члены, которые смогут изменять эти члены данных индивидуально. Напишите функцию-член Person::Print(), которая выводит отформатированные данные о человеке.

  1. Написать класс Complex, который будет реализовывать арифметические операции с комплексными числами.

  2. Разработать класс String, который в дальнейшем будет использоваться для работы со строками. Класс должен содержать:

    • конструктор по умолчанию, позволяющий создать строку длиной 80 символов;

    • конструктор, позволяющий создавать строку произвольного размера;

    • конструктор, который создаёт строку и инициализирует её строкой, полученной от пользователя.

Класс должен содержать методы для ввода строк с клавиатуры и вывода строк на экран.

Создание класса ''строка''

Рассмотрим следующую задачу: необходимо создать строковый класс, который позволил бы работать со строками: инициализировать их, реализовать функции ввода-вывода и сортировки строк.

#include <string.h>

#include <iostream.h>

#include <conio.h>

class string // Объявление строкового класса

{

private:

char* S; // Строка

int len; // Длина строки

public:

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

string(char* s); // Перегруженный конструктор

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

~string() { delete [] S; } // Деструктор

void Sort(string s[], int n); // Функция сортировки

void Print() { cout << S << endl; } // Распечатка

void GetStr() { char a[256]; cin.getline(a, 256);

S = new char[strlen(a) + 1]; strcpy(S, a); }

// Запрос строки у пользователя

};

string::string()

{

S = new char[81]; // Выделение памяти под 81 элемент

// строки для объекта по умолчанию

for(int i = 0; i < 81; i++)

S[i] = 0;

len = 80;

}

string::string(char* s)

{

len = strlen(s);

S = new char[len + 1];

strcpy(S, s); // Инициализация строкой, переданной

// пользователем

}

string::string(const string& s)

{

len = s.len;

S = new char[len + 1]; // Безопасное копирование

strcpy(S, s.S);

}

void string::Sort(string s[], int n)

{ // Сортировка строк

bool flag = true;

string temp;

for(int j = 1; ; j++)

{

for(int i = 0; i < n - j; i++)

if(strcmp(s[i].S, s[i + 1].S) > 0)

{

temp.len = s[i].len; // Вычисление длины строки

delete [] temp.S; // Удаление строки

temp.S = new char[temp.len + 1];// Выделение памяти

strcpy(temp.S, s[i].S); // Копирование строки

s[i].len = s[i + 1].len;

delete [] s[i].S;

s[i].S = new char[s[i].len + 1];

strcpy(s[i].S, s[i + 1].S);

s[i + 1].len = temp.len;

delete [] s[i + 1].S;

s[i + 1].S = new char[s[i + 1].len + 1];

strcpy(s[i + 1].S, temp.S);

flag = false;

}

if(flag)

break;

flag = true;

}

}

void main()

{

int n;

cout << "Input the number of strings:\t";

cin >> n; // Вводим количество строк

if(n < 0) {

cout << "Error number:\t" << n << endl;

return;

}

char c[2]; // Забираем из потока символ Enter ("\n")

cin.getline(c, 2);

string *s = new string[n]; // Создаем массив из n строк

for(int i = 0; i < n; i++)

s[i].GetStr(); // Ввод строк

s->Sort(s, n); // Сортировка строк

for(i = 0; i < n; i++)

s[i].Print(); // Вывод отсортированных строк

cout << endl;

getch(); // Ожидание нажатия клавиши

delete [] s; // Удаление массива

}