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

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

Войти
Регистрация
Восстановить пароль
 
kuraiMuko
1 / 1 / 0
Регистрация: 11.01.2012
Сообщений: 32
#1

Перегрузка операторов С++ - C++

08.02.2012, 22:07. Просмотров 608. Ответов 8
Метки нет (Все метки)

Задание: Написать код на языке С++ где реализуется перегрузка операторов.
Тематика: База данных института(студенты, аспиранты, преподаватели)
Помогите понять как и где можно использовать перегрузку операторов в моей тематике. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2012, 22:07     Перегрузка операторов С++
Посмотрите здесь:

Перегрузка операторов - C++
написал программу. проверил. вроде все правильно. но не работает. программа долjна посредством перегрузки знака = скопировать из строки S1...

Перегрузка операторов - C++
Здравствуйте! Пытаюсь понять синтаксис перегрузки операторов: Вот код: // Overload operators using member functions. ...

Перегрузка операторов - C++
вот есть такое задание Для заданного по варианту класса выполнить следующие действия: 1) описать все типы конструкторов и деструктор...

Перегрузка операторов - C++
Пытаюсь написать такой код: char* operator+(char *s1, char *s2) { return ""; } выдаёт ошибку: http://codepad.org/KS8qU8Ml...

Перегрузка операторов - C++
В общем учу эту тему и ввожу код один в один как в уроке, но в уроке он компилится, а у меня нет. Ругается на "c1++;", подскажите...

Перегрузка операторов - C++
Осуществите перегрузку оператора “+=” так, чтобы при его использовании сумма увеличивалась на 5. Помогите, срочно.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
08.02.2012, 23:43     Перегрузка операторов С++ #2
перегрузка ввода, вывода к примеру
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
08.02.2012, 23:52     Перегрузка операторов С++ #3
Описание операторов очень хорошо описано здесь. Там же есть и перегрузка вроде...
А если Вас волнуют примеры...
Из тематики БД...
Даже не знаю что посоветовать)
Например можно положить 2 разные БД в один указатель))))
А потом к ним обращаться по индексу)
Например загнать в вектор или лист)
Но это извращенство.

Хотя, правда) Перегрузить оператор запроса к БД
Например
dbase << "Some query";
Потом можно вытаскивать оттуда данные))
while( dbase.next() )
dbase >> a;

Что то вроде этого
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,921
Записей в блоге: 1
09.02.2012, 10:15     Перегрузка операторов С++ #4
Цитата Сообщение от kuraiMuko Посмотреть сообщение
Задание: Написать код на языке С++ где реализуется перегрузка операторов.
Тематика: База данных института(студенты, аспиранты, преподаватели)
Помогите понять как и где можно использовать перегрузку операторов в моей тематике. Спасибо.
а что именно надо перегрузить?
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.02.2012, 14:59     Перегрузка операторов С++ #5
Цитата Сообщение от kuraiMuko Посмотреть сообщение
Тематика: База данных института(студенты, аспиранты, преподаватели)
Как вариант использовать наследование. Почитайте про это в литературе, может подобные примеры и встретите.
Цитата Сообщение от panicwassano Посмотреть сообщение
перегрузка ввода, вывода к примеру
Лично мне больше ничего на ум не приходит.
Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
Например можно положить 2 разные БД в один указатель))))
Вы наверное хотите сказать создать вектор указателей на базовый класс. Тогда базовый класс можно сделать абстрактным. Вот и вся задача.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
09.02.2012, 15:52     Перегрузка операторов С++ #6
Можно перегружать операторы потокового ввода-вывода.
Пример для класса "Студент". В качестве полей -- имя и год поступления.

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
#include <string>
#include <iostream>
#include <sstream>
#include <vector>
 
// класс интерфейс сериализуемого объекта
class Serializable {
 public:
  virtual std::ostream &serialize(std::ostream &stream) = 0;
  virtual std::istream &deserialize(std::istream &stream) = 0;
};
 
// перегрузка оператора вывода
std::ostream &operator<<(std::ostream &stream, Serializable &object) {
  return object.serialize(stream);
}
 
// перегрузка оператора ввода
std::istream &operator>>(std::istream &stream, Serializable &object) {
  return object.deserialize(stream);
}
 
// сериализуемый контейнер-обертка над сериализуемым объектом
template <class T>
class Table : public Serializable {
 public:
  typedef typename std::vector<T>::iterator Iterator;
  typedef typename std::vector<T>::const_iterator ConstIterator;
  Table() : data() {}
  Table(std::istream &stream) : data() {
    deserialize(stream);
  }
  void pushBack(const T &value) { data.push_back(value); }
  void pushFront(const T &value) { data.push_front(value); }
  Iterator erase(Iterator what) {
    return data.erase(what);
  }
  void clear() { data.clear(); }
  size_t size() { return data.size(); }
  bool empty() { return data.empty(); }
  Iterator begin() { return data.begin(); }
  Iterator end() { return data.end(); }
  ConstIterator begin() const { return data.begin(); }
  ConstIterator end() const { return data.end(); }
  virtual std::ostream &serialize(std::ostream &stream) {
    for (Iterator i = begin(); i != end(); ++i)
      stream << *i;
    return stream;
  }
  virtual std::istream &deserialize(std::istream &stream) {
    data.clear();
    while (stream.good())
      data.push_back(T(stream));
    return stream;
  }
 private:
  std::vector<T> data;
};
 
// сериализуемый объект
class Student : public Serializable {
 public:
  Student() : name_(), admissionYear_() {}
  Student(std::istream &stream) {
    deserialize(stream);
  }
  Student(std::string name, size_t admissionYear)
    : name_(name), admissionYear_(admissionYear) {}
  const std::string &getName() const { return name_; }
  size_t getAdmissionYear() const { return admissionYear_; }
  virtual std::ostream &serialize(std::ostream &stream) {
    stream << getName() << ";" << getAdmissionYear() << ";" << std::endl;
    return stream;
  }
  virtual std::istream &deserialize(std::istream &stream) {
    std::string line;
    getline(stream, line);
    std::istringstream source(line);
    getline(source, name_, ';'); // deserialize name
    std::string buffer;
    getline(source, buffer, ';'); // deserialize year
    std::stringstream(buffer) >> admissionYear_;
    return stream;
  }
 private:
  std::string name_;
  size_t admissionYear_;
};
 
int main(int argc, char *argv[]) {
  // можно читать из любого потока, в том числе, из файла
  std::stringstream source("Ivanov;2001;\nPetrov;2001;\nSidorov;2002;");
  Table<Student> students(source);
  // удаление первого объекта
  students.erase(students.begin());
  // вывод
  for (Table<Student>::Iterator i = students.begin(); i != students.end(); ++i)
    std::cout << i->getName() << std::endl;
}
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.02.2012, 16:01     Перегрузка операторов С++ #7
lemegeton, А почему не идет перегрузка ввода-вывода, а используется реализация интерфейса (всмысле в чем профит)?
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
09.02.2012, 16:31     Перегрузка операторов С++ #8
хД
Автор партизанит) А тут для него стараются)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2012, 21:24     Перегрузка операторов С++
Еще ссылки по теме:

Перегрузка операторов С++ - C++
Здравствуйте, недавно начал изучать С++, до этого старался решать проблемы самостоятельно, но сейчас чето я туплю/не понимаю. Простоя...

Перегрузка операторов - C++
Здравствуйте. Есть класс, переменной членом которого является массив. Необходимо, перегрузить операторы так, чтоб к объектам класса...

Перегрузка операторов с++ - C++
Доброго времени суток!Вот у меня перегрузка оператора +.Задание сделапть пергрузку так чтобы к строке можно было добавить символ и к...

Перегрузка операторов - C++
Добрый вечер, вопрос в том, что я пытаюсь перегрузить оператор ++ постфиксно, но на нем падает программа, а перегруженный префиксно...


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

Или воспользуйтесь поиском по форуму:
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
09.02.2012, 21:24     Перегрузка операторов С++ #9
Цитата Сообщение от ForEveR Посмотреть сообщение
lemegeton, А почему не идет перегрузка ввода-вывода, а используется реализация интерфейса (всмысле в чем профит)?
Конечно, в данном учебном случае острой необходимости нет.

Профит в явности вызовов. В реальности моего окружения перегрузку операторов тщательно избегают, стараясь вообще все возможные операции и преобразования производить явно, за исключением, разве что, базовых вещей типа итераторов или контейнеров.
Ибо с усложнением и укрупнением проекта появляется неожиданное поведение невинных, с виду, вещей. Не заставишь же всех все документировать и всех читать всю документацию.

Особенно на этой почве отметились конструктор копирования и оператор присваивания, для которых у нас даже имеется макрос для отключения.

Не по теме:

Буквально на позапрошлой неделе один гражданин переписал оператор разыменования для базового класса итераторов в крупном проекте. Оператор был написан для каждого класса-потомка отдельно. Результат -- два дня убито на поиск бага. Плохая архитектура, конечно, виновата, но переписывать нереально -- лучше просто не трогать.

Yandex
Объявления
09.02.2012, 21:24     Перегрузка операторов С++
Ответ Создать тему
Опции темы

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