186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
1

перегрузка операторов

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

Author24 — интернет-сервис помощи студентам
попробую объяснить на примере
допустим есть класс
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.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2011, 15:04
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...

Перегрузка операторов
Привет, не подскажите, почему у меня тут не работает правильно += оператор. #include <iostream>...

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

Перегрузка операторов
Привет, у меня есть код, но когда я его делал у меня возникла пара вопросов. #include <iostream>...

12
4768 / 2578 / 892
Регистрация: 29.11.2010
Сообщений: 5,575
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;
}
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
25.12.2011, 15:39  [ТС] 3
если честно не понял код по этому куча вопросов



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

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

что мне было понятно не могли бы вы закоментить весь код класса
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
25.12.2011, 15:41 4
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
что делает текст который после двоеточия (не как не могу сформулировать этот вопрос гуглу)
инициализация
1
DU
1500 / 1146 / 165
Регистрация: 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()) и подставляет в этом месте вызов этого оператора. В результате код компилируется.
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
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;}
нечего страшного не произойдет?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
25.12.2011, 16:01 7
код останется корректным, но чуть менее эффективным. для кого-то это страшно, для кого-то нет. но лучше сразу привыкать делать по нормальному, т.е. инициализировать в списке инициализации, тем более что иногда нужна именно инициализация в списке инициализации (например для констант или ссылок или для объектов без дефолтного конструктора).
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
26.12.2011, 19:42  [ТС] 8
а если у меня несколько вариантов функции конструктора, то надо в каждой перегрузке создавать список инициализации
0
4768 / 2578 / 892
Регистрация: 29.11.2010
Сообщений: 5,575
27.12.2011, 01:40 9
До использования нового стандарта С++11, да, все конструкторы должны инициализировать все члены класса отдельно.
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
27.12.2011, 08:23  [ТС] 10
а сейчас
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.12.2011, 08:25 11
ЛеЖиК), А сейчас есть delegating constructors.
Но появились они в gcc только в 4.7 релиза которого еще не было.
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
27.12.2011, 08:46  [ТС] 12
так
вообщем мне в каждой перегрузке писать?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.12.2011, 08:53 13
ЛеЖиК), Да.
1
27.12.2011, 08:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2011, 08:53
Помогаю со студенческими работами здесь

Перегрузка операторов
Привет, ребят! Помогите разобраться с перегрузкой, а то преподы нынче и сами ничего не знают. Вот....

Перегрузка операторов
Помогите решить задачу на c++ мучаюсь 3 день Перегрузить операторы «==» и «!=» для строк....

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

[C++] Перегрузка операторов
Помогите пожалуйста перегрузить операторы в матрице: +=, i++, != и Перегрузил *= но не...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru