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

Написать два класса с методами. Без использования STL - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Halva
 Аватар для Halva
23 / 23 / 2
Регистрация: 02.11.2008
Сообщений: 118
21.05.2011, 00:55     Написать два класса с методами. Без использования STL #1
Надеюсь на вашу помощь, т.к. с С++ не знаком. Думаю новичкам будет отличной задачей для разминки...

Задача 1. Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка. В результате выполнения программы в обоих объектах исключить лишние пробелы между словами (оставить только по одному). Содержимое объектов (их строки) до и после обмена вывести на экран. Функцию вывода содержимого объекта реализовать как внешнюю по отношению к классу
*******
Задача 2. Для созданного объекта А, разработанного класса – вектор (одномерный массив), реализовать перегрузку оператора new. Содержимое объекта (А, его вектора) вывести на экран.
_________________

!Необходимо наличие:
а) конструктор по умолчанию;
б) конструктор с параметрами;
в) конструктор копирования;
г) деструктор;
д) методы класса для работы с данными.
Компоненты данные класса должны иметь атрибут private или protected.

!!! Без использования методов STL (vector, string, queue)...
______________

Буду очень благодарен за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2011, 00:55     Написать два класса с методами. Без использования STL
Посмотрите здесь:

C++ С++, контейнерный класс типа список без использования STL
Написать рекурсивную функцию которая принимает два аргумента и перемножает их между собой, но без оператора умножения C++
C++ операции с строками без использования класса string
C++ Реально ли написать программы С++ без использования библиотек ?
C++ Как написать генератор чисел без использования стандартных функций?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
21.05.2011, 01:03
  #2

Не по теме:

Halva, Как бэ, намек.

lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
21.05.2011, 13:41     Написать два класса с методами. Без использования STL #3
Ну, типа, 2.
Вывод отдельно можно организовать через шаблонную функцию ForEach.
В чем сакральный смысл переписывать оператор new? Без сакрального смысла я просто выделил память.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <cstdlib>
#include <cstdio>
 
template <class Container>
class BackInsertIterator {
protected:
  Container* container_;
public:
  typedef Container          container_type;
  typedef void                value_type;
  typedef void                difference_type;
  typedef void                pointer;
  typedef void                reference;
 
  explicit BackInsertIterator(Container& container) : container_(&container) {}
  BackInsertIterator<Container>&
  operator=(const typename Container::ValueType& value) { 
    container_->PushBack(value);
    return *this;
  }
  BackInsertIterator<Container>& operator*() { return *this; }
  BackInsertIterator<Container>& operator++() { return *this; }
  BackInsertIterator<Container>& operator++(int) { return *this; }
};
 
 
template <class Tp_>
class Vector {
 public:
  typedef Tp_ ValueType;
  typedef ValueType *Iterator;
  Vector() : start_(0), finish_(0), end_of_storage_(0) {}
  explicit Vector(size_t capacity)
    : start_(0), finish_(0), end_of_storage_(0) {
    start_ = finish_ = new ValueType[capacity];
    end_of_storage_ = start_ + capacity;
  }
  Vector(const Vector &other)
    : start_(0), finish_(0), end_of_storage_(0) {
    for (Iterator source = other.Begin(); source != other.End(); ++source)
      PushBack(*source);
  }
  ~Vector() {
    delete start_;
  }
  const ValueType &At(int position) const { return start_[position]; }
  ValueType &At(int position) { return start_[position]; }
  const ValueType &Back() const { return *(finish_ - 1); }
  ValueType &Back() { return *(finish_ - 1); }
  const ValueType &Front() const { return *start_; }
  ValueType &Front() { return *start_; }
  Iterator Insert(Iterator position, const ValueType &value) {
    if (position == End()) {
      return PushBack(value);
    } else {
      if (finish_ == end_of_storage_)
        Reserve(Capacity() + 5);
      for (Iterator source = finish_ - 1,
           destination = finish_;
           source != position - 1; --source, --destination)
        *destination = *source;
      ++finish_;
      *position = value;
      return position;
    }
  }
  size_t Capacity() {
    return end_of_storage_ - start_;
  }
  void Clear() {
    finish_ = start_;
  }
  size_t Size() const { return finish_ - start_; }
  bool Empty() const { return finish_ == start_; }
  Iterator PushBack(const ValueType &value) {
    if (finish_ == end_of_storage_)
      Reserve(Capacity() + 5);
    *finish_ = value;
    return finish_++;
  }
  Iterator Erase(Iterator position) {
    if ((position + 1) != End()) {
      for (Iterator source = position + 1,
           destination = position;
           source != finish_; ++source, ++destination)
        *destination = *source;
    }
    --finish_;
    return position;
  }
  void Reserve(size_t new_size) {
    if (Capacity() < new_size) {
      ValueType *new_start = new ValueType[new_size];
      ValueType *new_finish = new_start;
      ValueType *old_start = start_;
      while (old_start < finish_)
        *(new_finish++) = *(old_start++);
      delete start_;
      start_ = new_start;
      finish_ = new_finish;
      end_of_storage_ = new_start + new_size;
    }
  }
  const Iterator Begin() const { return start_; }
  const Iterator End() const { return finish_; }
  Iterator Begin() { return start_; }
  Iterator End() { return finish_; }
  ValueType &operator[](size_t position) {
    return start_[position];
  }
  Vector &operator=(const Vector &other) {
    if (this != &other) {
      Clear();
      for (Iterator source = other.Begin(); source != other.End(); ++source)
        PushBack(*source);
    }
    return *this;
  }
  void *operator new(size_t size) {
    return malloc(size);
  }
  void operator delete(void *p) {
    return free(p);
  }
 private:
  ValueType *start_;
  ValueType *finish_;
  ValueType *end_of_storage_;
};
 
template<class IteratorOne, class IteratorTwo, class Functor>
void ForEach(IteratorOne begin, IteratorTwo end, Functor functor) {
  while (begin != end) functor(*(begin++));
}
 
template <typename ValueType>
struct Print {
  void operator()(ValueType &value) {
    printf("%4d", value);
  }
};
 
int main(int argc,char *argv[]) {
  Vector<int> vector;
  BackInsertIterator<Vector<int> > j(vector);
  for (int i = 0; i < 100; j = i++);
  vector.Erase(vector.End() - 2);      // erase  #98
  vector.Insert(vector.End() - 1, 98); // insert #98  
  vector.Erase(vector.Begin());        // erase  #0
  vector.Insert(vector.Begin(), 0); // insert #0
  Vector<int> *vector2 = new Vector<int>(vector);
  ForEach(vector2->Begin(), vector2->End(), Print<int>());
 
  delete vector2;
  return 0;
}
Добавлено через 39 минут
Ну и первая.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <cstdlib>
#include <cstdio>
// Вместо следующих двух функций можно просто включить ctring
//#include <cstring>
 
size_t strlen(const char *value) {
  size_t result = 0;
  for (const char *symbol = value; *symbol != '\0'; ++symbol)
    ++result;
  return result;
}
 
char *strcpy(char *destination, const char *source) {
  char *result = destination;
  while (*source != '\0')
    *(destination++) = *(source++);
  *destination = *source;
  return result;
}
 
class String {
 public:
  typedef char* Iterator;
  String() : data_(NULL) {}
  String(const char *value)
    : data_(strcpy(new char[
                  strlen(value) + 1],
                  value)) {}
  String(const String &other) : data_(NULL) {
    Set(other);
  }
  ~String() { delete [] data_; }
  char *Set(const char *value) {
    delete [] data_;
    return data_ = strcpy(new char[strlen(value) + 1], value);
  }
  String &Set(const String &other) {
    Set(other.CStr());
    return *this;
  }
  void Normalize() {
    // вот тут нужно сделать функцию, которая удалит лишние пробелы
    for (char *i = data_; *i != '\0'; ++i)
      if (*i == ' ' && *(i - 1) == ' ') {
        char *j = i;
        while (*j == ' ') ++j;
        while (*j != '\0')
          *(i++) = *(j++);
        *i = *j;
      }
  }
  char *CStr() const { return data_; }
  size_t Size() const { return strlen(data_); }
  char &operator[](size_t position) { return data_[position]; }
  String &operator=(const String &other) {
    if (this != &other)
      return Set(other);
    return *this;
  }
 private:
  char *data_;
};
 
template <class Type>
void Swap(Type &a, Type &b) {
  Type c = a;
  a = b;
  b = c;
}
 
int main(int argc, char *argv[]) {
  String first = "This is the first     string.";
  String second = "This is  the second string..";
  printf("'%s' / '%s'\n", first.CStr(), second.CStr());
  first.Normalize();
  second.Normalize();
  Swap(first, second);
  printf("'%s' / '%s'\n", first.CStr(), second.CStr());
}
Добавлено через 10 минут
Цитата Сообщение от Halva Посмотреть сообщение
Надеюсь на вашу помощь, т.к. с С++ не знаком.
Подобные задачи "незнакомым с С++" не дают. Это задача институтская. Такие задачи дают где-то на третьем или четвертом курсе специализированной профессии. На учебу был положен балшой болт где-то два семестра назад, я угадал?
Halva
 Аватар для Halva
23 / 23 / 2
Регистрация: 02.11.2008
Сообщений: 118
21.05.2011, 14:44  [ТС]     Написать два класса с методами. Без использования STL #4
lemegeton, Ничего себе, для "новичков". Тут я перегнул) Да действительно, задачка институтская, болт был положен не мной, я спокойно работаю в своем направлении, а вот девушкам такие задачки действительно интересно было бы доверить!)
Ещё раз огромное спасибо...
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
21.05.2011, 17:02     Написать два класса с методами. Без использования STL #5
Цитата Сообщение от lemegeton Посмотреть сообщение
Подобные задачи "незнакомым с С++" не дают. Это задача институтская. Такие задачи дают где-то на третьем или четвертом курсе специализированной профессии. На учебу был положен балшой болт где-то два семестра назад, я угадал?
Это типичная задача для нашего 2 курса при изучении ООП на С++. Второй семестр - реализация динамических контейнеров. То есть они уже три семестра к тому времени варятся в С++
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
21.05.2011, 21:15     Написать два класса с методами. Без использования STL #6
ValeryLaptev, довольно необычно. Это какой институт?
"Два курса обучения" это в смысле конкретно языка и после еще трех общеобразовательных?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
22.05.2011, 01:26     Написать два класса с методами. Без использования STL #7
Цитата Сообщение от lemegeton Посмотреть сообщение
ValeryLaptev, довольно необычно. Это какой институт?
"Два курса обучения" это в смысле конкретно языка и после еще трех общеобразовательных?
Это Астраханский технический универ.
Первый курс, 2 семестр - программирование на языке высокого уровня.
Второй курс, 1 семестр - программирование на языке высокого уровня, курсовая, ООП
Второй курс, 2 семестр - ООП, курсовая, Структуры данных и алгоритмы.

Все - С++ в среде VS 2010.
То есть, 2 семестра - программирование на ЯВУ+курсовая, 2 семестра - ООП+курсовая, 1 семестр - алгоритмы и структуры данных (здесь лектор отвлекается и на C#, и на Pithon).

Еще на 2-м - Организация ЭВМ, которую правильней было бы назвать Архитектура ЭВМ.
А на 3-м - Операционные системы, Базы данных и Системное ПО.
Jupiter
22.05.2011, 01:33
  #8

Не по теме:

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
ООП+курсовая
везет же людям) не дай им бог курсач по численным методам...

Kastaneda
22.05.2011, 09:45
  #9

Не по теме:

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Это Астраханский технический универ.
Первый курс, 2 семестр - программирование на языке высокого уровня.
Второй курс, 1 семестр - программирование на языке высокого уровня, курсовая, ООП
Второй курс, 2 семестр - ООП, курсовая, Структуры данных и алгоритмы.

Все - С++ в среде VS 2010.
То есть, 2 семестра - программирование на ЯВУ+курсовая, 2 семестра - ООП+курсовая, 1 семестр - алгоритмы и структуры данных (здесь лектор отвлекается и на C#, и на Pithon).

Еще на 2-м - Организация ЭВМ, которую правильней было бы назвать Архитектура ЭВМ.
А на 3-м - Операционные системы, Базы данных и Системное ПО.
Здорово!

НГТУ (новосибирский гос.тех) (заочно)
1 семестр - ничего
2 семестр - ничего
3 семестр - FORTRAN
4 семестр - основы языка C
дальше я пока не знаю...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2011, 11:36     Написать два класса с методами. Без использования STL
Еще ссылки по теме:

Алгоритм удаления гласных букв из строки без использования методов класса String C++
C++ Std::vector добавить новый элемент собственного класса без использования конструктора копирования
C++ Структура программы или наследование, без использования конструктора базового класса

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

Или воспользуйтесь поиском по форуму:
silent_1991
22.05.2011, 11:36     Написать два класса с методами. Без использования STL
  #10

Не по теме:

Цитата Сообщение от Maxwe11 Посмотреть сообщение
не дай им бог курсач по численным методам
А мне нравилось)))

Yandex
Объявления
22.05.2011, 11:36     Написать два класса с методами. Без использования STL
Ответ Создать тему
Опции темы

Текущее время: 20:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru