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

объектно-ориентирование - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить для обратной матрицы сумму эллементов, расположенных над главной диагональю и под ней. С++ http://www.cyberforum.ru/cpp-beginners/thread425010.html
Программный код для формирования матрицы, а так же нахождения обратной матрицы #include <conio.h> #include <math.h> #include <stdio.h> #include <iostream> using namespace std; int nn,i,j; double A, L;
C++ есть ли ошибка в программе? задание Дано натуральное число, найти сумму его делителей. Вывести все делители и их сумму на печать. начинается ли ряд чисел с 1( в этой программе)? #include <stdio.h> int main() { int n,i,s,x; printf("Введите количество суммируемых чисел"); //запрос ввода scanf("%d",&n); //ввод s=0; i=1; x=1; //начальные значения http://www.cyberforum.ru/cpp-beginners/thread425004.html
C++ Создать копию объекта производного класса зная указатель на базовый
Добрый день! Вопрос в следующем... Возможно ли создать копию объекта производного класса зная указатель на базовый класс? У меня получился вариант, приведенный ниже. Однако в нем не нравится функция clone которая динамически сравнивает типы с известными ей, и потом вызывает создание нового объекта, копия производного. Минус здесь, всегда приходится знать все типы производных классов от базового....
C++ Перевод программы на С++ с Паскаля
var sn,s:string; l,k,kod:integer; v,p:real; begin writeln('Введите строку'); readln(s); l:=length(s); p:=1; k:=1; repeat sn:='';
C++ Абстрактный класс http://www.cyberforum.ru/cpp-beginners/thread424964.html
вот у меня есть классы: class CCommand { public: virtual ~CCommand() {}; virtual void execute(CShape *selection)=0; virtual void unexecute()=0; virtual CCommand* clone()=0; };
C++ Задачник по C/C++ Здравствуйте! Ребята, может кто посоветует хорошую книгу с задачами, и желательно с решениями к ним по С/С++ ? Буду очень благодарен!;) подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
09.01.2012, 23:23     объектно-ориентирование
Интерфейс писать не буду, но набор классов с примерами вот.

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
#include <cmath>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <iterator>
 
// immutable
class Flat {
 public:
  Flat(size_t numberOfRooms, int floorNumber, float area,
    const std::string &address) : numberOfRooms_(numberOfRooms),
    floorNumber_(floorNumber), area_(area), address_(address) {}
  size_t getNumberOfRooms() const { return numberOfRooms_; }
  int getFloorNumber() const { return floorNumber_; }
  float getArea() const { return area_; }
  const std::string &getAddress() const { return address_; }
 private:
  size_t numberOfRooms_;
  int floorNumber_; // может быть отрицательным
  float area_;
  std::string address_;
};
 
std::ostream &operator<<(std::ostream &stream, const Flat &flat) {
  return stream << flat.getAddress() << ", rooms: " <<
    flat.getNumberOfRooms() << ", floor: " << flat.getFloorNumber() <<
    ", area: " << flat.getArea();
}
 
// обертка для контейнера
class Flats {
 public:
  typedef std::vector<Flat>::iterator Iterator;
  Flats() : flats_() {}
  void add(const Flat &flat) { flats_.push_back(flat); }  
  void erase(Iterator flat) { flats_.erase(flat); }
  Iterator begin() { return flats_.begin(); }
  Iterator end() { return flats_.end(); }
  size_t size() const { return flats_.size(); }
  void clear() { flats_.clear(); }
  Flat &operator[](size_t n) { return flats_[n]; }
  const Flat &operator[](size_t n) const { return flats_[n]; }
  Iterator findMatch(Iterator begin, Iterator end, const Flat &other,
    size_t percent) {
    for (; begin != end; ++begin)
      if (begin->getNumberOfRooms() == other.getNumberOfRooms() &&
        begin->getFloorNumber() == other.getFloorNumber() &&
        fabs(begin->getArea() - other.getArea()) * 100. / begin->getArea() <
        percent)
        return begin;
    return end;
  }
 private:
  std::vector<Flat> flats_;
};
 
std::ostream &operator<<(std::ostream &stream, Flats &flats) {
  std::copy(flats.begin(), flats.end(),
    std::ostream_iterator<Flat>(stream, "\n"));
  return stream;
}
 
int main(int argc, char *argv[]) {
  Flats flats;
  flats.add(Flat(2, 3, 100, "A"));
  flats.add(Flat(2, 3, 91, "B"));
  flats.add(Flat(3, 4, 91, "B2"));
  flats.add(Flat(2, 3, 90, "C"));
  flats.add(Flat(2, 3, 89, "D"));
  flats.add(Flat(2, 3, 111, "E"));
  flats.add(Flat(2, 3, 110, "F"));
  flats.add(Flat(2, 3, 109, "G"));
  flats.add(Flat(2, 4, 77, "H"));
 
  // вывод всего
  std::cout << flats << std::endl;
 
  // вывод всех подходящие варианты
  Flats::Iterator flat = flats.begin();
  while ((flat = flats.findMatch(flat, flats.end(),
    Flat(2, 3, 100, "D"), 10)) != flats.end())
    std::cout << *flat++ << std::endl;
  std::cout << std::endl;
 
  // удаление первого найденного подходящего варианта
  flats.erase(flats.findMatch(flats.begin(), flats.end(),
    Flat(2, 3, 100, "D"), 10));
  
  // замена данных, доступ по индексу
  flats[3] = Flat(3, 4, 91, "B2 edited");
 
  std::cout << flats << std::endl;
 
  // очистка всего
  flats.clear();
  return 0;
}
 
Текущее время: 23:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru