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

Передача объектов функциям(объясните код программы)

09.11.2016, 12:12. Показов 1422. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот программа:
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
#include <iostream>
using namespace std;
 
class samp
{
    int i;
public:
    samp(int n){i=n;}
    void set_i(int n){i=n;}
    int get_i(){return i;}
};
void sqr_it(samp *o)
{
    cout<<"Первоначальное значение 'а' равно: "<<o->get_i();
    cout<<"\n";
    o->set_i(o -> get_i() * o -> get_i());
    cout<<"для объекта 'а' значение i равно: "<<o->get_i();
    cout<<endl;
}
int main()
{
    setlocale(LC_ALL, "rus");
    samp a(10);
    sqr_it(&a);
    cout<<"теперь значение 'а' в ф-ции main() изменилось:";
    cout<<a.get_i()<<endl;
    system("pause");
    return 0;
}
Эта прога заменяет первоначальное значение объекта его квадратом!

Меня в частности интересует 9-ая и 8-ая строки, посните как там происходит передача значение объекта?
Т.е. если мы из строки 23 передаём значение в строку 8 что же тогда делает строка 9?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.11.2016, 12:12
Ответы с готовыми решениями:

Передача объектов функциям
Задание: &quot;Переделать свою задачу из лабораторной N, сделав функции не частью класса, а внешними, использующими объекты в качестве...

Задачи по функциям. Объясните задачу по функциям)
Вводится последовательность из N целых чисел. Для каждого числа последовательности вывести новое число, которое получится после записи цифр...

Объясните код программы
void __fastcall TForm1::Button2Click(TObject *Sender) { AnsiString s=Memo1-&gt;Text; int s_leng=s.Length(); AnsiString num=&quot;&quot;; ...

10
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
09.11.2016, 12:48
Цитата Сообщение от Maxim09 Посмотреть сообщение
что же тогда делает строка 9?
Выполняет работу в 16 строке.
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 12:50  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Выполняет работу в 16 строке.
Т.е. значение объекта передаётся и в 8-ую и в 9-ую строки так?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
09.11.2016, 12:54
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

8 строчка - это конструктор для создания объекта с одним целочисленным параметром,
а 9-я строчка позволяет задать значение переменной i для уже созданного объекта.
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 12:55  [ТС]
Спс
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
09.11.2016, 12:58
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

Цитата Сообщение от Maxim09 Посмотреть сообщение
Т.е. значение объекта передаётся и в 8-ую и в 9-ую строки так?
Жуткая путаница в терминологии.
Давай-ка по-нормальному:
В 23 строке объект samp a; создается (и инициализируется) значением целочисленного литерала 10, которое передается аргументом конструктора (строка 8).
Внутри конструктора, правда, выполняется присваивание для переменной i, а не инициализация, но здесь это не играет роли. По смыслу - тут инициализация.
Затем мы выполняем некие вычисления, используя значение i; это значение нам возвращает функция-член get_i() (в строке 16). Результат этих вычислений - rvalue типа int, передается аргументом функции-члена set_i(), где выполняется присваивание i (и фактически и по смыслу).
Таким образом, если мы говорим про объект samp a;, то имеет смысл говорить о понятиях инициализации и присваивания. Вот именно с этими понятиями и надо разобраться тебе.
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 13:07  [ТС]
А почему выполняется присваивание для переменной i внутри конструктора? В чём смысл?
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
09.11.2016, 13:11
Цитата Сообщение от Maxim09 Посмотреть сообщение
А почему выполняется присваивание для переменной i внутри конструктора? В чём смысл?
Как я уже сказал, смысл этого присваивания - инициализация. Когда объект создается, ему требуется некое начальное значение.
Более корректная запись отражающая именно семантику инициализации выглядит так:
C++
1
2
3
4
5
6
7
8
class samp
{
    int i;
public:
    samp(int n) : i(n) {} //!!!
    void set_i(int n){i=n;}
    int get_i(){return i;}
};
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 13:14  [ТС]
А можно ли будет это написать таким образом:
C++
1
samp::samp{i=n}
Но отдельно не в теле класса?
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
09.11.2016, 13:19
Цитата Сообщение от Maxim09 Посмотреть сообщение
А можно ли будет это написать таким образом:
Да. Это будет определение. А в классе нужно будет оставить объявление, вот так:
C++
1
2
3
4
5
6
7
8
9
10
class samp
{
    int i;
public:
    samp(int n); // объявление
    void set_i(int n){i=n;}
    int get_i(){return i;}
};
 
samp::samp(int n) : i(n) {} // определение
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 13:20  [ТС]
Ясно, спасибо вам за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.11.2016, 13:20
Помогаю со студенческими работами здесь

Объясните код программы
Помогите,что здесь за что отвечает и выполняется. const int N = 20; main() { int i, x, j, A, B, E, c; printf(&quot;\n...

Объясните код программы
Объясните пожалуйста программу!!! Добавлено через 44 секунды #include &lt;iostream&gt; #include &lt;math.h&gt; #include...

Объясните код программы
#include&lt;stdio.h&gt; //библиотека объявления функций и типов, //используемых для различных операций стандартного ввода и вывода ...

Объясните код программы
Вот рабочий код) напротив каждой строки через 2 слеша обьясните что происходит в программе, желательно поподробнее) спасибо) #include...

Объясните код программы
Пожалуйста объясните программу, если не трудно после каждой строчки напишите кометариий #include &lt;iostream.h&gt; int main () { ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru