С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Halva
23 / 23 / 2
Регистрация: 02.11.2008
Сообщений: 118
#1

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

21.05.2011, 00:55. Просмотров 1349. Ответов 9
Метки нет (Все метки)

Надеюсь на вашу помощь, т.к. с С++ не знаком. Думаю новичкам будет отличной задачей для разминки...

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

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

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

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

Работа с векторами без использования STL и библиотеки <vector> - C++
Здравствуйте Уважаемые формучане. Подскажите пожалуйста, есть ли смысл писать свой собственный класс Vector если из него всё равно будет...

Реализовать (без использования контейнеров STL) Б-дерево со вставкой и удалением элементов - C++
Здравствуйте! Очень нужна реализация Б-дерева на С или С++ со вставкой и удалением элементов, но без использования контейнеров из STL....

Как скопировать массив в вектор одной строкой без использования циклов и алгоритмов STL? - C++
Уважаемые формучане, не подскажете, как скопировать массив в вектор одной строкой без использования циклов и алгоритмов STL?

Контейнерный класс типа "Список" без использования STL - C++
Есть базовый класс Component и три производных от него класса: Chipset, SoundCard и VideoAdapter. Нужно описать контейнерный класс Computer...

Структура программы или наследование, без использования конструктора базового класса - C++
Всем доброго времени суток. Снова прошу вас о помощи! Код располагается по ссылке в спойлере - не вставлю сюда, так как слишком...

Алгоритм удаления гласных букв из строки без использования методов класса String - C++
Помогите хоть один написать. это на C# надо, но можно и на C++. Алгоритм удаления гласных букв из строки без использования методов...

9
asics
21.05.2011, 01:03
  #2

Не по теме:

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

0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
21.05.2011, 13:41 #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 Посмотреть сообщение
Надеюсь на вашу помощь, т.к. с С++ не знаком.
Подобные задачи "незнакомым с С++" не дают. Это задача институтская. Такие задачи дают где-то на третьем или четвертом курсе специализированной профессии. На учебу был положен балшой болт где-то два семестра назад, я угадал?
1
Halva
23 / 23 / 2
Регистрация: 02.11.2008
Сообщений: 118
21.05.2011, 14:44  [ТС] #4
lemegeton, Ничего себе, для "новичков". Тут я перегнул) Да действительно, задачка институтская, болт был положен не мной, я спокойно работаю в своем направлении, а вот девушкам такие задачки действительно интересно было бы доверить!)
Ещё раз огромное спасибо...
0
ValeryLaptev
Эксперт С++
1046 / 825 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
21.05.2011, 17:02 #5
Цитата Сообщение от lemegeton Посмотреть сообщение
Подобные задачи "незнакомым с С++" не дают. Это задача институтская. Такие задачи дают где-то на третьем или четвертом курсе специализированной профессии. На учебу был положен балшой болт где-то два семестра назад, я угадал?
Это типичная задача для нашего 2 курса при изучении ООП на С++. Второй семестр - реализация динамических контейнеров. То есть они уже три семестра к тому времени варятся в С++
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
21.05.2011, 21:15 #6
ValeryLaptev, довольно необычно. Это какой институт?
"Два курса обучения" это в смысле конкретно языка и после еще трех общеобразовательных?
0
ValeryLaptev
Эксперт С++
1046 / 825 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
22.05.2011, 01:26 #7
Цитата Сообщение от lemegeton Посмотреть сообщение
ValeryLaptev, довольно необычно. Это какой институт?
"Два курса обучения" это в смысле конкретно языка и после еще трех общеобразовательных?
Это Астраханский технический универ.
Первый курс, 2 семестр - программирование на языке высокого уровня.
Второй курс, 1 семестр - программирование на языке высокого уровня, курсовая, ООП
Второй курс, 2 семестр - ООП, курсовая, Структуры данных и алгоритмы.

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

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

Не по теме:

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

0
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
дальше я пока не знаю...

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

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2011, 11:36
Привет! Вот еще темы с ответами:

Std::vector добавить новый элемент собственного класса без использования конструктора копирования - C++
Всем привет! Есть один класс, который я хочу хранить в std::vector. Создать массив, с типом своего класса, грубо говоря. Естественно,...

Реально ли написать программы С++ без использования библиотек ? - C++
1)Реально ли писать программы С++ без использования библиотек ? 2)оно того стоит ?

Как написать генератор чисел без использования стандартных функций? - C++
Нужно написать программу генерирования равномерно распределенных случайных чисел без использования стандартных функций rand и т.д. Помогите...

Написать аналог шаблонной функции без использования стандартной (и других библиотек) - C++
Здравствуйте! Набрел на вот такой вопрос по C++. Вот мой вариант ответа: template&lt;class Base, class Derived&gt; bool...


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

Или воспользуйтесь поиском по форуму:
10
22.05.2011, 11:36
Ответ Создать тему
Опции темы

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