Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Mr. Pyatachok
8 / 9 / 1
Регистрация: 30.06.2011
Сообщений: 250

объяснить функцию

09.10.2011, 17:44. Показов 3265. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<conio.h>
#include<iostream.h>
 
class integer1
{
  int val;
    public:
  integer1(int v0 ) {val=v0;}
  friend integer1 INC(integer1);
  integer1 INC(integer1 scr) {scr.val++; return scr;}
 
};
 
void main()
{
 integer1 x(5),y=(0),z=(0);
 y=INC(x);
 z=INC(INC(x));
 
 getch();
}
Необходимо подсчитать количество объектов и изобразить схему их взаимодействия (копирование, отображение).

Объектов 3, помогите понять что твориться в этих строках
C++
1
2
friend integer1 INC(integer1);
integer1 INC(integer1 scr) {scr.val++; return scr;}
Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2011, 17:44
Ответы с готовыми решениями:

Объяснить функцию
Добрый вечер всем. Хотел бы разузнать поподробнее что делает эта функция. Заранее прошу объясните каждую строку поэтапно. На языке Нуба......

Объяснить функцию проверки степени
int proverkastepeni(int n) { return !(n&amp;(n-1)); } Нашел вот такую функцию проверки степени, не совсем понимаю как она работает....

Объяснить функцию perevod
Определить функцию преобразования десятичного числа n в СС( двоичную, восьмеричную, шестнадцатиричную) с основанием b. Пусть функция...

26
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 19:22
Студворк — интернет-сервис помощи студентам
Подозреваю, что это какой-то задачник, с задачами типа "что напечатает программа". А вместо реализации конкретных функций (в последнем примере - конструкторов), там стоят ... (типа оно есть, работает, но на результат вывода не влияет)

Добавлено через 1 минуту
Цитата Сообщение от Сыроежка Посмотреть сообщение
Что касается Майкрософт VC++ 2010, то, даже убрав из класса предварительное объявление, код не компилируется. То есть имеет место очевидный баг. Например, на старом Borland Builder 5.0 этот код компилируется.
У меня компилируется такой код. Возможно, у меня другая версия студии
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.10.2011, 19:23
Цитата Сообщение от Сыроежка Посмотреть сообщение
Правильно ли я понял, что вы проверили использование определения этой дружественной функции внутри класса, убрав из класса предварительное ее объявление, и у вас с помощью gcc все скомпилировалось?
C++
1
2
3
4
5
6
7
class integer1
{
    int val;
public:
    integer1(int v0 ) {val=v0;}
    friend integer1 INC(integer1 scr) {scr.val++; return scr;}
};
0
Заблокирован
09.10.2011, 19:26
Цитата Сообщение от Nameless One Посмотреть сообщение
C++
1
2
3
4
5
6
7
class integer1
{
    int val;
public:
    integer1(int v0 ) {val=v0;}
    friend integer1 INC(integer1 scr) {scr.val++; return scr;}
};
Значит gcc в отличии от Майкрософт VC++ 2010 в этом вопросе следует стандарту. Лично я уже в VC++ 2010 нашел четыре бага.

Добавлено через 1 минуту
Цитата Сообщение от aeshes Посмотреть сообщение
Подозреваю, что это какой-то задачник, с задачами типа "что напечатает программа". А вместо реализации конкретных функций (в последнем примере - конструкторов), там стоят ... (типа оно есть, работает, но на результат вывода не влияет)

Добавлено через 1 минуту


У меня компилируется такой код. Возможно, у меня другая версия студии
Может быть у вас уже с обновлением компилятор. Как я уже сказал, я не поставил себе SP1, который появился сразу же после выхода компилятора.

Но тоже интересный вопрос: у вас компилируется код, когда предварительное объявление присутствует в классе, или же вы убрали предварительное объявление этой функции, оставив лишь ее определение?
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
09.10.2011, 19:29
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class integer1
{
  int val;
    public:
  integer1(int v0 ) {val=v0;}
  friend integer1 INC(integer1);
  integer1 INC(integer1 scr) {scr.val++; return scr;}
 
};
 
void main()
{
 integer1 x(5),y=(0),z=(0);
 y=INC(x);
 z=INC(INC(x));
 
 getch();
}
Предположу, что компилятор воспринимает это как 2 разные ф-ции. Чтоб код компилировался, нужно добавить (не переместить из тела класса, а добавить) определение INC() за пределом класса, либо убрать строку с friend..., а в мэйне сделать так:
C++
1
y=x.INC(x);
бред конечно, но похоже что получаются ф-ция INC() - член класса и ф-ция INC() (в данном случае без реализации) - дружественная, не член класса.
Вроде понятно объяснил...
0
Заблокирован
09.10.2011, 19:32
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class integer1
{
  int val;
    public:
  integer1(int v0 ) {val=v0;}
  friend integer1 INC(integer1);
  integer1 INC(integer1 scr) {scr.val++; return scr;}
 
};
 
void main()
{
 integer1 x(5),y=(0),z=(0);
 y=INC(x);
 z=INC(INC(x));
 
 getch();
}
Предположу, что компилятор воспринимает это как 2 разные ф-ции. Чтоб код компилировался, нужно добавить (не переместить из тела класса, а добавить) определение INC() за пределом класса, либо в мэйне сделать так:
C++
1
y=x.INC(x);
бред конечно, но похоже что получаются ф-ция INC() - член класса и ф-ция INC() (в данном случае без реализации) - дружественная, не член класса.
Вроде понятно объяснил...
Вполне возможно, что ваше объяснение близко к истине. То есть опять-таки проблема заключается в связывании, внешнем и внутреннем. То есть когда компилятор видет объявление, то он считает, что эта функция имеет внешнее связывание, а встраиваемые функции имеют внутреннее связывание. Поэтому компилятор не считает, что объявление друга имеет отношение к этой встроенной функции.

Надо просто убрать предварительное объявление, оставив определение, естественно, добавив к нему ключевое слово friend, и проблем не должно быть, если компилятор следует стандарту.
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 19:39
Сыроежка, убрала прототип (предварительное объявление) и все компилируется. С прототипом - нет.
Честно сказать, я даже не знаю, где посмотреть, какая у меня версия компилятора в студии, только версию самой студии могу сказать 10.0.30319.1 RTMRel

В стандарте вроде что-то было про то, что дружественные функции в классе, впервые предварительно объявленные, имеют внешнюю линковку или как-то так с поправкой на мой английский
0
Заблокирован
09.10.2011, 19:46
Цитата Сообщение от aeshes Посмотреть сообщение
Сыроежка, убрала прототип (предварительное объявление) и все компилируется. С прототипом - нет.
Честно сказать, я даже не знаю, где посмотреть, какая у меня версия компилятора в студии, только версию самой студии могу сказать 10.0.30319.1 RTMRel

В стандарте вроде что-то было про то, что дружественные функции в классе, впервые предварительно объявленные, имеют внешнюю линковку или как-то так с поправкой на мой английский
Да, в стандарте есть подобная фраза "11.4 #3 A friend first declared in a friend declaration has external linkage."
На это я и ссылался.
Что касается моего компилятора VC++ 2010, то я его по глупости купил в первых рядах, а обновление, которое вышло уже затем следом, еще не установил. Может быть этот баг уже исправлен.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2011, 19:46

Объяснить функцию арксинус
Пришла на ум одна задачка , кто может помочь разобраться в тригонометрии ? Условия и вопрос на картинке .

Объяснить функцию двухмерного массива
for n in range(1,5): for k in range(n,5): A = A + 1 A = A + 1 //Остального кода нет, объяснить двоеточие после...

Объяснить пожалуйста мне эту функцию
На просторах интернета нашел один из методов адаптивного меню и все по CSS ясно и понятно, но вот в jQuery (в том как эта функция написана)...

Объяснить $(this)
Есть скрипт с Stack Overflow &lt;script&gt; $(document).on(&quot;submit&quot;, &quot;#login-form&quot;, function(event) { var $form = $(this); ...

Объяснить
Напишите,пожалуйста построчный коментарий,к каждой строке что она делает,и что за функция,и зачем нужна,СРОЧНО!!! function...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
BitTorrent (версия 7.11 English) и Меню Настройки
russiannick 15.11.2026
Пункты, отвечающие за отключение обновлений в BitTorrent версии 7. 11 (английской) Options Preferences General Language
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент". В данной функции нет апострофов,. . .
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru