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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ поиск корней уравнения http://www.cyberforum.ru/cpp-beginners/thread300873.html
Нужна прога, которая будет искать корни уравнения : at 2 y= e - (cos t + ln3t) Методом половинного деления на заданном пользователем интервале
C++ Вызов функции по таймеру в с++ Делаю слайдщоу в с++. При этом считываю путь к файлам из базы данных. Прописал функции таймера, смены слайда, выхода с нажатием клавиши. Все работает. void CShowDlg::Next() { try { if(CRec1->IsBOF()) CRec1->MoveNext(); http://www.cyberforum.ru/cpp-beginners/thread300865.html
C++ Позднее и раннее связывание
у меня проблема не могу разобратся с этим "приведите пример (без реализации методов) познего и раннего связывание" завтро здавать а мыслей ноль.
C++ Игры в камушки через классы
Условие задачи: Имеются три кучки камней. Двое играющих по очереди делают ходы. Каждый ход заключается в том, что из какой-то одной кучки берется произвольное, ненулевое число камней. Выигрывает взявший последний камень. Требуется написать с помощью классов - отдельно класс игрока, отдельно для кучек с камнями. Обязательна инкапсуляция внутри классов. Исходный код делался в расчете только на...
C++ наследование http://www.cyberforum.ru/cpp-beginners/thread300840.html
Пытаюсь разобраться в наследовании Есть класс class File { public: struct comp { char num; // Имя переменной char st; // Значение переменной char time;
C++ Перевод с Паскаля на С++ Помогите переделать с Паскаля на С++. 1)Вывести максимальное число из файла in.txt. Листинг: Program num23; uses crt; var f1:file of integer; f2:text; n,i,a,max,imax,k:integer; подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
21.05.2011, 13:41     Написать два класса с методами. Без использования STL
Ну, типа, 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 Посмотреть сообщение
Надеюсь на вашу помощь, т.к. с С++ не знаком.
Подобные задачи "незнакомым с С++" не дают. Это задача институтская. Такие задачи дают где-то на третьем или четвертом курсе специализированной профессии. На учебу был положен балшой болт где-то два семестра назад, я угадал?
 
Текущее время: 14:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru