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

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

09.11.2016, 12:12. Просмотров 924. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2016, 12:12
Ответы с готовыми решениями:

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

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

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

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

10
13474 / 7137 / 1712
Регистрация: 30.01.2014
Сообщений: 11,937
09.11.2016, 12:48 2
Цитата Сообщение от Maxim09 Посмотреть сообщение
что же тогда делает строка 9?
Выполняет работу в 16 строке.
0
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 12:50  [ТС] 3
Цитата Сообщение от DrOffset Посмотреть сообщение
Выполняет работу в 16 строке.
Т.е. значение объекта передаётся и в 8-ую и в 9-ую строки так?
0
Модератор
Эксперт С++
9802 / 8363 / 5091
Регистрация: 18.12.2011
Сообщений: 22,370
09.11.2016, 12:54 4
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

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

Решение

Цитата Сообщение от Maxim09 Посмотреть сообщение
Т.е. значение объекта передаётся и в 8-ую и в 9-ую строки так?
Жуткая путаница в терминологии.
Давай-ка по-нормальному:
В 23 строке объект samp a; создается (и инициализируется) значением целочисленного литерала 10, которое передается аргументом конструктора (строка 8).
Внутри конструктора, правда, выполняется присваивание для переменной i, а не инициализация, но здесь это не играет роли. По смыслу - тут инициализация.
Затем мы выполняем некие вычисления, используя значение i; это значение нам возвращает функция-член get_i() (в строке 16). Результат этих вычислений - rvalue типа int, передается аргументом функции-члена set_i(), где выполняется присваивание i (и фактически и по смыслу).
Таким образом, если мы говорим про объект samp a;, то имеет смысл говорить о понятиях инициализации и присваивания. Вот именно с этими понятиями и надо разобраться тебе.
1
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 13:07  [ТС] 7
А почему выполняется присваивание для переменной i внутри конструктора? В чём смысл?
0
13474 / 7137 / 1712
Регистрация: 30.01.2014
Сообщений: 11,937
09.11.2016, 13:11 8
Цитата Сообщение от 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
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 13:14  [ТС] 9
А можно ли будет это написать таким образом:
C++
1
samp::samp{i=n}
Но отдельно не в теле класса?
0
13474 / 7137 / 1712
Регистрация: 30.01.2014
Сообщений: 11,937
09.11.2016, 13:19 10
Цитата Сообщение от 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
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
09.11.2016, 13:20  [ТС] 11
Ясно, спасибо вам за помощь!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2016, 13:20

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Объясните код программы
Пожалуйста объясните программу, если не трудно после каждой строчки напишите кометариий #include...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.