Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 03.06.2019
Сообщений: 83

Файлы, структуры

24.06.2020, 14:03. Показов 760. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Начал изучать файлы и структуры. Наткнулся на код... Я не могу понять, что означает эта запись "Operation(double s, double r) : sum(s), rate(r) {}"?

Вот часть кода:
C++
1
2
3
4
5
struct Operation {
    int sum;
    double rate;
    Operation(double s, double r) : sum(s), rate(r) {}
};
Вот это, я так понимаю, что конструктор "Operation(double s, double r)" структуры Operation, а вот эту запись, я вообще не понимаю " : sum(s), rate(r) {}".
Подскажите, что делает эта запись " : sum(s), rate(r) {}"?

Вот весь код:

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
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
 
using namespace std;
 
struct Operation {
    int sum;
    double rate;
    Operation(double s, double r) : sum(s), rate(r) {}
};
 
int main() {
    vector <Operation> operations = {
        Operation(21, 12.5),
        Operation(23.5, 1.6),
        Operation(21.5, 3)
    };
    string path = "text.txt";
    ofstream fout;
    fout.open(path);
    if(fout.is_open()) {
        for(int i = 0; i < operations.size(); i++) {
            fout << operations[i].sum << " " << operations[i].rate << endl;
        }
    }
    fout.close();
    vector <Operation> new_operations;
    double rate;
    int sum;
    ifstream fin(path);
    if(fin.is_open()){
        while (fin >> sum >> rate){
            new_operations.push_back(Operation(sum, rate));
        }
    }
    fin.close();
    for(int i = 0; i < new_operations.size(); i++) {
        cout << new_operations[i].sum << " " << new_operations[i].rate << endl;
    }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.06.2020, 14:03
Ответы с готовыми решениями:

Файлы и структуры
Дана информация о шести студентах. Структура имеет вид: фамилия, рост, вес, цвет волос. Вывести данные о блондинах с максимальным ростом. ...

Структуры и файлы
Помогите почему-то не происходит очистка файла при записи новых данных. #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Структуры и файлы
Помогу решить проблему. С записью в файл все нормально, но когда считываю с файла возникает ошибка &quot;Вызвано исключение по адресу...

6
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.06.2020, 14:09
Цитата Сообщение от Artem_7 Посмотреть сообщение
что делает эта запись " : sum(s), rate(r) {}"
происходит инициализация полей sum и rate параметрами конструктора

Добавлено через 3 минуты
Только вот, одно поле - целое, а вызываются конструкторы с числами с плавающей точкой.
Может, стоит оба поля сделать double (и дальше переменную sum)?

Кстати, не увидел сразу:
C++
1
2
3
4
5
struct Operation {
    int sum;
    double rate;
    Operation(double s, double r) : sum(s), rate(r) {}
};
Не смущает, что в одном случае пишется int, в другом double?
1
151 / 103 / 49
Регистрация: 21.11.2019
Сообщений: 285
24.06.2020, 14:13
C++
1
    Operation(double s, double r) : sum(s), rate(r) {}
Этот конструктор можно было бы переписать как

C++
1
2
3
4
5
    Operation(double s, double r)
    {
        sum=s;
        rate=r;
    }
Если так легче для понимания. Только в первом случае происходит инициализация значениями, а во втором случае присваивание значений.

Кстати можно еще так написать:

C++
1
    Operation(double s, double r) : sum{s}, rate{r} {}
Тоже валидная запись с унифицированной инициализацией.
0
1 / 1 / 0
Регистрация: 03.06.2019
Сообщений: 83
24.06.2020, 17:08  [ТС]
liv, можно сделать два поля double! Код ведь не мой, а пример из интернета. В коде мне все понятно кроме конструктора.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.06.2020, 17:10
Artem_7, ну так, вроде объяснили...
0
1 / 1 / 0
Регистрация: 03.06.2019
Сообщений: 83
24.06.2020, 17:13  [ТС]
Shut913, то есть особой разницы нет в этих двух записях Operation(double s, double r) : sum(s), rate(r) {} и Operation(double s, double r) { sum=s; rate=r; }, кроме того, что в одной инициализация, а во второй присваивание? На программу я думаю оно ж никак не повлияет?!

Добавлено через 1 минуту
liv, спасибо! Я понял эту запись, но для закрепления, нужно ещё мне поиграть с кодом)
0
151 / 103 / 49
Регистрация: 21.11.2019
Сообщений: 285
24.06.2020, 17:25
Artem_7, все верно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.06.2020, 17:25
Помогаю со студенческими работами здесь

Структуры и файлы
Доброй ночи!:) В общем задание: написать программу (валшепную), которая описывает структуру, содержащую: -имя, -знак зодиака, -дата...

Структуры и файлы
Короче, такая шляпа. Препод сказал, что бы я разбил по файлам структуры. И, сделал я структуру в header файле. В структуре я объявил...

Файлы и структуры
Народ помогите, плиззз!!! В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую...

Структуры и Файлы
Есть такое задание: Написать программу, которая реализует географический справочник. В справочнике содержится следующая информация:...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
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-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru