Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641

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

25.12.2011, 15:04. Показов 1481. Ответов 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.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2011, 15:04
Ответы с готовыми решениями:

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

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

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

12
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
25.12.2011, 15:24
Тут нужен оператор приведения к типу. Я написал заодно и оператор "=" но он нужен в "обратном" случае.
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  [ТС]
если честно не понял код по этому куча вопросов



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

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

что мне было понятно не могли бы вы закоментить весь код класса
0
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
25.12.2011, 15:41
Цитата Сообщение от ЛеЖиК) Посмотреть сообщение
что делает текст который после двоеточия (не как не могу сформулировать этот вопрос гуглу)
инициализация
1
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
25.12.2011, 15:44
для понимания ':' ищите в гугле "список инициализации мемберов класса".
оператор 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  [ТС]
большое спасибо

Добавлено через 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
код останется корректным, но чуть менее эффективным. для кого-то это страшно, для кого-то нет. но лучше сразу привыкать делать по нормальному, т.е. инициализировать в списке инициализации, тем более что иногда нужна именно инициализация в списке инициализации (например для констант или ссылок или для объектов без дефолтного конструктора).
1
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
26.12.2011, 19:42  [ТС]
а если у меня несколько вариантов функции конструктора, то надо в каждой перегрузке создавать список инициализации
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
27.12.2011, 01:40
До использования нового стандарта С++11, да, все конструкторы должны инициализировать все члены класса отдельно.
1
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
27.12.2011, 08:23  [ТС]
а сейчас
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.12.2011, 08:25
ЛеЖиК), А сейчас есть delegating constructors.
Но появились они в gcc только в 4.7 релиза которого еще не было.
0
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
27.12.2011, 08:46  [ТС]
так
вообщем мне в каждой перегрузке писать?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
27.12.2011, 08:53
ЛеЖиК), Да.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.12.2011, 08:53
Помогаю со студенческими работами здесь

Перегрузка операторов
Привет, у меня есть код, но когда я его делал у меня возникла пара вопросов. #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru