Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
#1

Реализация класса - C++

14.09.2011, 08:57. Просмотров 1103. Ответов 9
Метки нет (Все метки)

Так как только начал изучать с++, возникает вопрос:
есть задание :
Реализовать класс IntArray. Разработать тестовую программу для проверки работоспособности класса (т.е. необходимо убедиться в работоспособности всех конструкторов и операторов класса, а также всех его методов). Для этого достаточно делать распечатку массива после выполнения каждой операции, которая может изменять его содержимое.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class IntArray
{
public: // открытая часть, или интерфейс класса
IntArray(int sz = 12); // конструктор по умолчанию
IntArray(const IntArray &rhs); // копирующий конструктор
IntArray(int *array, int sz); // инициализация встроенным массивом
~IntArray() {delete[] pia;} // Деструктор, освобождает память,
// занятую объектом
int size(); // возвращает размер массива;
int min(); // возвращает минимальный и
int max(); // максимальный элемент
// объявление операторов для работы с объектами класса
bool operator== (const IntArray &rhs); // проверка на равенство
bool operator!= (const IntArray &rhs); // и неравенство массивов.
int& operator[] (int index); // оператор доступа к элементам массива
IntArray& operator = (const IntArray &rhs);// оператор присваивания
private: // закрытая часть, реализация класса
int _size; // размер текущего объекта массива;
int *pia; // указатель на встроенный массив, содержащий
// элементы объекта
};
Вопрос: Ни как не пойму что необходимо реализовать в первых двух конструкторах IntArray(int sz = 12); и IntArray(const IntArray &rhs); ???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.09.2011, 09:26     Реализация класса #2
adds, В конструкторе соответственно выделить память под объект в кол-ве size. В конструкторе копирования - соответственно скопировать (т.е. выделить память, скопировать, скопировать размер) - профит.
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
14.09.2011, 09:51  [ТС]     Реализация класса #3
ForEveR, то есть вот так должно выглядеть? :
C++
1
2
3
4
5
6
7
8
9
10
11
12
IntArray::IntArray(int sz)
{
     
     pia = new A[_size = sz];
     for(int i = 0; i < _size; i++);
}
IntArray::IntArray(const IntArray &rhs)
{
     pia = new A[_size];
     for(int i = 0; i < _size; i++)
         pia[i] = rhs.pia[i];
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.09.2011, 09:55     Реализация класса #4
Примерно да.

Инициализировать нулями забыл (в массиве мусор - нехорошо).
В копировании забыл скопировать размер.

Т.е.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IntArray::IntArray(int sz)
{
     _size = sz;
     pia = new A[_size];
     for(int i = 0; i < _size; i++)
     {
         pia[i] = 0;
     }
}
IntArray::IntArray(const IntArray &rhs)
{
     _size = rhs._size;
     pia = new A[_size];
     for(int i = 0; i < _size; i++)
         pia[i] = rhs.pia[i];
}
Для копирования можно использовать memcpy или std::copy. Для заполнения std::fill или memset.
adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
14.09.2011, 10:09  [ТС]     Реализация класса #5
благодарю
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
14.09.2011, 10:52     Реализация класса #6
1)Добавь
C++
1
const int& operator[] (int index) const;
для константных объектов.
2) min, max и size тоже должны быть константными
C++
1
2
3
int size() const; 
int min() const;
int max() const;
3) Для размера массива и индексации лучше использовать std::size_t из <cstddef>.
silent_1991
14.09.2011, 11:14
  #7

Не по теме:

adds, СибГУТИ? ТП? Пудов?

adds
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 14
14.09.2011, 13:34  [ТС]     Реализация класса #8
silent_1991, Кемерово, КЕМГУ
silent_1991
14.09.2011, 14:36
  #9

Не по теме:

adds, надо же, похоже, кто-то у кого-то свистит задания

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2011, 15:04     Реализация класса
Еще ссылки по теме:

C++ Реализация класса String
Реализация класса Vector C++
Реализация класса полином C++
Реализация класса на базе класса Stack с возможностью !индексирования! C++
C++ Реализация класса Library

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.09.2011, 15:04     Реализация класса #10
Цитата Сообщение от ForEveR Посмотреть сообщение
Инициализировать нулями забыл (в массиве мусор - нехорошо).
C++
1
2
3
4
5
6
7
8
9
IntArray::IntArray(int sz)
{
     _size = sz;
     pia = new A[_size];
     for(int i = 0; i < _size; i++)
     {
         pia[i] = 0;
     }
}
Что здесь значит A? Тип данных? В любом случае цикл не нужен. Достаточно просто вызвать "дефолтный конструктор" (даже не знаю как это назвать для базовых типов).
C++
1
pia = new int[_size]();
Yandex
Объявления
14.09.2011, 15:04     Реализация класса
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru