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

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

Войти
Регистрация
Восстановить пароль
 
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
#1

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

25.12.2011, 15:04. Просмотров 843. Ответов 12
Метки нет (Все метки)

попробую объяснить на примере
допустим есть класс
C++
1
2
3
4
5
6
class myclass
{
private:
    string stroka;
public:
    myclass(string strok){stroka=strok;}
мне нужно как то перегрузить оператор = что бы при выполнение такого кода
C++
1
2
myclass q="asd";
string qq=q;
в qq оказалось asd.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2011, 15:04     перегрузка операторов
Посмотрите здесь:

Перегрузка операторов - C++
Здравствуйте! Сейчас читаю книгу: "Искусство программирование на С++" Шилдта. Часто встречается перегрузка. Заметил, что в некоторых...

перегрузка операторов - C++
Имеется такая программа: class reversion { vector<int> mass1; vector<int> mass2; vector<int> rev1; vector<int> rev2; ...

Перегрузка операторов - C++
Привет, ребят! Помогите разобраться с перегрузкой, а то преподы нынче и сами ничего не знают. Вот. Имеем три файла (ну если кто захочет...

Перегрузка операторов - C++
Реализуйте класс CTime , моделирующий время суток ( количество часов , минут и секунд). Каркас класса : / / Моделирует время суток ,...

Перегрузка операторов 2 - C++
Пишу класс комплексных чисел. И возникла проблема.Я перегрузил операторы +-*/. Но когда использую их в строке типа a=b+c*d - где все...

Перегрузка операторов - C++
В программе нужно сделать перегрузку оператора умножения, не могу понять что и как делать... Помогите разобраться :) #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
25.12.2011, 15:24     перегрузка операторов #2
Тут нужен оператор приведения к типу. Я написал заодно и оператор "=" но он нужен в "обратном" случае.
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
#include <string>
#include <iostream>
 
using std::string;
 
class myclass {
 private:
  string stroka;
 public:
  explicit myclass(const string &strok) : stroka(strok) {}
  operator string() { return stroka; }
  myclass &operator=(const char *strok) {
    stroka = strok;
    return *this;
  }
};
 
int main(int argc, char *argv[]) {
  myclass a("some text");
  a = "asdf"; // loosing "some text"
  string b = a; // b = "asdf"
  std::cout << b << std::endl;
  return 0;
}
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
25.12.2011, 15:39  [ТС]     перегрузка операторов #3
если честно не понял код по этому куча вопросов



Цитата Сообщение от lemegeton Посмотреть сообщение
(const string &strok) : stroka(strok)
что делает текст который после двоеточия (не как не могу сформулировать этот вопрос гуглу)

почему перегружаем оператор () и он возврашает строку, хотя при использование пишем равно

что мне было понятно не могли бы вы закоментить весь код класса
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
25.12.2011, 15:41     перегрузка операторов #4
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
что делает текст который после двоеточия (не как не могу сформулировать этот вопрос гуглу)
инициализация
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.12.2011, 15:44     перегрузка операторов #5
для понимания ':' ищите в гугле "список инициализации мемберов класса".
оператор string () - это оператор неявного преобразования объекта класса mуclass в строку

C++
1
2
myclass a("some text");
string b = a;
у класса стринг нет конструктора или оператора =, который бы принимал в качестве аргумента класс myclass. Комплиятор в этом случае смотрит, а можно ли как нибудь из объекта класса myclass сделать строку. Он находит вот такой специальный оператор преобразования в строку (operator string()) и подставляет в этом месте вызов этого оператора. В результате код компилируется.
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
25.12.2011, 15:56  [ТС]     перегрузка операторов #6
большое спасибо

Добавлено через 3 минуты
то есть если заменить
C++
1
explicit myclass(const string &strok) : stroka(strok) {}
на
C++
1
explicit myclass(const string &strok)  {stroka=strok;}
нечего страшного не произойдет?
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.12.2011, 16:01     перегрузка операторов #7
код останется корректным, но чуть менее эффективным. для кого-то это страшно, для кого-то нет. но лучше сразу привыкать делать по нормальному, т.е. инициализировать в списке инициализации, тем более что иногда нужна именно инициализация в списке инициализации (например для констант или ссылок или для объектов без дефолтного конструктора).
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
26.12.2011, 19:42  [ТС]     перегрузка операторов #8
а если у меня несколько вариантов функции конструктора, то надо в каждой перегрузке создавать список инициализации
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
27.12.2011, 01:40     перегрузка операторов #9
До использования нового стандарта С++11, да, все конструкторы должны инициализировать все члены класса отдельно.
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
27.12.2011, 08:23  [ТС]     перегрузка операторов #10
а сейчас
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.12.2011, 08:25     перегрузка операторов #11
ЛеЖиК), А сейчас есть delegating constructors.
Но появились они в gcc только в 4.7 релиза которого еще не было.
ЛеЖиК)
157 / 60 / 1
Регистрация: 29.04.2011
Сообщений: 631
27.12.2011, 08:46  [ТС]     перегрузка операторов #12
так
вообщем мне в каждой перегрузке писать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2011, 08:53     перегрузка операторов
Еще ссылки по теме:

Перегрузка операторов - C++
Доброго времени суток. Начал изучать основы ООП, дошел до перегрузки операторов. В программе возникает ошибка при проверке любого...

Перегрузка операторов. C++ - C++
Помогите пожалуйста написать программу на тему перегрузка операторов. Задания Унарная операция. Создать объект - связный...

Перегрузка операторов - C++
Даны два одномерных массива. Необходимо сделать перегрузку разности ( - ) этих массивов с получением этого массива.

Перегрузка операторов >>, <<, [] - C++
задача: написать перегруженные операторы &lt;&lt;, &gt;&gt; и для объекта массив деков символов. Объект дек реализован. проблема с квадратными...


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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
27.12.2011, 08:53     перегрузка операторов #13
ЛеЖиК), Да.
Yandex
Объявления
27.12.2011, 08:53     перегрузка операторов
Ответ Создать тему
Опции темы

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