Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334

Что не так в перегрузке оператора индексирования?

22.07.2019, 00:13. Показов 3946. Ответов 49
Метки нет (Все метки)

C++
1
Star& operator[](const int index);
C++
1
2
3
4
Star& Galaxy::operator[](const int index)
{
    return stars[index];
}
C++
1
2
3
4
Sputnik sp(name, 12, 3);
    Star star(12,3,1,name,4,sp);
    Galaxy gal(3);
    gal[0] = star;
Подскажите в чем ошибка ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2019, 00:13
Ответы с готовыми решениями:

Перегрузка оператора индексирования
Всем привет! Ситуация такая - есть 2 класса, поле одного класса является массивом из элементов второго класса. Необходимо переопределить...

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

Перегрузка оператора индексирования
Что-то не выходит каменный цветок. Определение класса: struct TEventData { char strComputerName; }; class TEventDataSet { ...

49
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.07.2019, 21:23
Цитата Сообщение от Макрой Посмотреть сообщение
теперь проинициализировал
Задача конструктора - инициализация всех полей класса. Вы мне показываете другой конструктор(в котором кстати date не инициализируется).

Для инициализации массивом звезд замените свой конструктор Galaxy(int _data, Star*_stars ) на следующий:
C++
1
2
3
4
5
6
Galaxy::Galaxy(int _data, Star* _stars, int length)
    :date(_data), length(_length), stars(new Star[length])
{
    for (int i = 0; i < length; ++i)
        stars[i] = _stars[i];
}
1
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
23.07.2019, 21:28  [ТС]
zayats80888,
Когда мне нужно будет инициализировать каждый элемент массива,я должен буду постоянно заново указывать размер массива? Почему нельзя создать перегруженные конструкторы? 1-по умолчанию,2-для инициализации размера,3 - для инициализации массива и интового поля date ?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.07.2019, 21:39
Цитата Сообщение от Макрой Посмотреть сообщение
Почему нельзя создать перегруженные конструкторы? 1-по умолчанию,2-для инициализации размера,3 - для инициализации массива и интового поля date ?
Макрой, создают разные для разных вариантах инициализации всех полей. Как правило. Это потому, что после окончания работы конструктора получается объект готовый к ответу на обращения. Нужно стремиться к созданию готовых объектов. Бывают и исключения, но вам оно пока не надо. Почитайте про инвариант класса.
1
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
23.07.2019, 21:49  [ТС]
zayats80888,
C++
1
2
3
4
5
6
Galaxy::Galaxy(int _data, Star* _stars, int length)
    :date(_data), length(_length), stars(new Star[length])
{
    for (int i = 0; i < length; ++i)
        stars[i] = _stars[i];
}
C++
1
2
3
4
Galaxy gal(12, &star, 3);
    gal[0] = star;
    gal[1] = star2;
    gal[2] = star3;
C++
1
2
3
4
5
6
7
8
9
10
11
12
Sputnik Sputnik::operator =(const Sputnik& v)
{
    
    delete[] name;
    if (this == &v) return *this;
    name = new char[strlen(v.name) + 1];//эта ошибка здесь
    strcpy_s(name, strlen(v.name) + 1, v.name);
 
    mass = v.mass;
    radius = v.radius;
    return *this;
}
выдает ошибку при использовании вашего конструктора
Миниатюры
Что не так в перегрузке оператора индексирования?  
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.07.2019, 21:54
Цитата Сообщение от Макрой Посмотреть сообщение
Galaxy gal(12, &star, 3);
Цитата Сообщение от zayats80888 Посмотреть сообщение
Для инициализации массивом звезд
Что есть star и почему 3?
0
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
23.07.2019, 21:59  [ТС]
zayats80888,
C++
1
2
3
4
5
6
7
Star star(12,3,1,name,4,sp);
    Star star2(34, 5, 6, name, 12, sp);
    Star star3(66, 89, 99, name, 5555, sp);
    Galaxy gal(12, &star, 3);
    gal[0] = star;
    gal[1] = star2;
    gal[2] = star3;
star - объект класса Star,элемент массива типа Star
3 - размерность массива
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.07.2019, 22:24
Макрой, я ж писал массивом звезд:
C++
1
2
3
4
5
6
7
    Star arr[] =
    {
        Star(12, 3, 1, name, 4, sp),
        Star(34, 5, 6, name, 12, sp),
        Star(66, 89, 99, name, 5555, sp)
    };
    Galaxy gal(12, arr, sizeof(arr)/sizeof(Star)); // звезды скопированы, ничего присваивать не нужно
1
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
23.07.2019, 22:55  [ТС]
zayats80888, Да,все так же само работает. Скажите еще раз почему вам не понравились мои 2 конструктора(тот,который инициализирует размер и тот,который инициализирует дату и массив) ?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.07.2019, 23:20
Цитата Сообщение от Макрой Посмотреть сообщение
все так же само работает
Не так же.
Цитата Сообщение от Макрой Посмотреть сообщение
Скажите еще раз почему вам не понравились мои 2 конструктора
Первый не инициализирует дату(там мусор и если вас это беспокоит, нужно хотя бы 0 туда вписать по умолчанию)
Второй не инициализирует length(там мусор), а значит о инициализации массива речи быть не может.
1
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
24.07.2019, 01:16  [ТС]
zayats80888,
C++
1
Galaxy(int _data, Star* _satrs,int _lenght);
C++
1
2
3
4
5
6
Galaxy::Galaxy(int _data, Star* _stars, int _length)
    :date(_data), length(_length), stars(new Star[length])
{
    for (int i = 0; i < length; ++i)
        stars[i] = _stars[i];
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sputnik sp(name, 12, 3);
    Star arr[] =
    {
        Star(12, 3, 1, name, 4, sp),
        Star(34, 5, 6, name, 12, sp),
        Star(66, 89, 99, name, 5555, sp)
    };
    Galaxy gal(12, arr, sizeof(arr) / sizeof(Star));
    cout << "Перегруженный индексатор" << endl;
    for (int i = 0; i < 3;i++)
    {
        cout << gal[i] << endl;
        
    }
Вот все изменил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2019, 01:16

Перегрузка оператора индексирования для <map>
Вопрос: как правильно перегрузить оператор для контейнера map, который принадлежит к классу? Заранее спасибо! class TrainStation ...

Аналог перегрузки оператора индексирования (operator [])
Как по-другому(то есть в виде обычной функции или как то ещё) можно записать перегрузку оператора индексирования? Например в моём случае:...

Перегрузка оператора индексирования для контейнера list
Здравствуйте помогите перегрузить оператор индексирования для контейнера list это последнее задание из домашнего задания,преподователь...

Перегрузка оператора индексирования для обращения к элементам по имени
Доброго времени суток! Столкнулся с проблемой перегрузки оператора индексирования при разработке класса-массива. Обращение к элементам...

Ошибка в перегрузке оператора
Не пойму в чем дело(( Имеется класс вектор ,вычислил длину,а теперь очу сравнить их величины,но не могу составить данный оператор выдает...


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

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
22. Подключение слоя системной динамики (потоковые диффуры): экономические метрики модели
anaschu 17.06.2026
Апдейт модели: финансовый контур, разделение затрат Продолжаю развивать модель рабочего коллектива на AnyLogic. В этот раз работа шла над агентом Экономика — финансовым SD-слоем модели. Задача:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru