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

Чем внешняя функция отличается от дружественной кроме как синтаксисом?

17.03.2014, 23:38. Показов 6835. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Внешняя
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class CBox                             
{
  public:
    double m_Length;                  
    double m_Width;                  
    double m_Height;                 
    double Volume (void);   
} 
 
inline  double CBox::Volume()
  {
    return m_Length*m_Width*m_Height;
  }
Дружественная
C++
1
2
3
4
5
6
7
8
9
10
11
12
class CBox                             
{
  public:
    double m_Length;                  
    double m_Width;                  
    double m_Height;                   
} 
 
friend Volume(double m_Length, double m_Width,double m_Height)
  {
    return m_Length*m_Width*m_Height;
  }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2014, 23:38
Ответы с готовыми решениями:

Чем функция if отличается от оператора if?
Требуется определить в MathCAD функцию f(x) используя а) Функцию if; б) оператор if. Задание 2.

Чем отличается функция от процедуры?
Возник вопрос.Чем отличается функция от процедуры? И как пользоваться Return в функциях? Знаю что он после выполнения переходит к End...

Чем отличается процедура-функция от подпрограммы
Ребят, помогите ответить на вопросы: 1)как производится обращение к функции? какие типы встроеных функций есть в VB? 2)Назовите...

8
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,557
17.03.2014, 23:42
Что в вашем понимании "внешняя" функция?
И что общего между вашими двумя примерами?
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
17.03.2014, 23:47
Дружественная функция имеет доступ к private данным того класса, в котором она была объявлена и не является членом класса.
1
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
17.03.2014, 23:51  [ТС]
John Prick, Внешняя - располагается вне класса, но компилятором трактуется как встроенная.
Общее то, что их тело располагается вне класса.
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,557
17.03.2014, 23:56
delexa, вашем примере под названием "внешняя функция" написана функция-член класса. То, что вы написали её реализацию вне класса, а не при объявлении, не имеет практически никакого значения. (Кроме разных аспектов встроенности, которые не заканчиваются на объявлении inline перед функцией).
1
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
17.03.2014, 23:58  [ТС]
John Prick, значит единственное различие в том, что дружественные функции не являются членами класса?
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,557
18.03.2014, 00:06
В ваших примерах между этими функциями столько отличий, что даже сложно сразу подобрать ответ.
Конкретно по примеру с объёмом вообще не получится сделать такую функцию-член (нестатическую) и дружественную функцию, чтобы они различались только тем, что одна бы являлась членом класса, а другая - нет.
Вот так, по идее, должен был выглядеть ваш пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CBox                             
{
    friend double Volume(CBox & box);
private: // иначе вообще нет смысла в "друге"
    double m_Length;                  
    double m_Width;                  
    double m_Height;                 
public:
    double Volume (void);   
} 
 
double CBox::Volume()
{
    return m_Length*m_Width*m_Height;
}
 
double Volume(CBox & box)
{
    return box.m_Length * box.m_Width * box.m_Height;
}
2
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.03.2014, 00:14
Лучший ответ Сообщение было отмечено delexa как решение

Решение

delexa Путаница у тебя такая, жутко аж
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
class A
{
public:
    void foo1(); // функция класса, или метод(!). Где она определена (внутри класса или нет)
                  // влияет только на связывание(!). 
};
 
void foo2(); //Свободная функция, это как раз и есть то, что можно называть твоим термином "внешняя"
 
class B
{
public:
    friend void foo2(); // объявление дружественной свободной(!) функции классу B
};
 
void foo2() // определение дружественной свободной(!) функции классу B
{ }
 
class C
{
public:
    friend void A::foo1(); //объявление дружественного метода(!) из класса А классу С
};
 
class D
{
public:
    static void foo3(); //объявление статической(!) функции класса D,
                       // где ее определение влияет только на связывание(!)
};
Методы класса всегда привязаны к объекту класса. Они имеют неявный параметр для доступа к данным объекта.
Статические функции класса имеют доступ к данным класса (статическим) и данным объекта (если в такую функции передать этот объект).
Дружественные функции класса могут быть как методами, так и свободными функциями, имеют доступ к данным класса, который определил их дружественными себе. Но для этого туда (в функцию) нужно передать каким-либо образом объект этого класса.
1
 Аватар для Splitty
6 / 6 / 4
Регистрация: 15.12.2013
Сообщений: 34
18.03.2014, 00:50
"Внешняя" функция не имеет никакого доступа к классу и не являеться его частью, дружественная функция имеет доступ к классу, хотя не являеться его частью(при этом она объявляеться внутри класса)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2014, 00:50
Помогаю со студенческими работами здесь

Чем отличается функция с __stdcall и без
Что такое __stdcall? Прочитал на msdn ниче не ясно, чем отличается функция с __stdcall и без. Вот например код: #include <iostream>...

Чем отличается функция старого стиля от нового?
Чем отличается функции старого стиля от нового? И если можно пример

Какие бывают сайты кроме web-сайтов? Или чем отличается сайт от web-сайта (вебприложения)?
Очень сильно задумался над этим вопросом... Помогите понять) Гугл и яндекс корректной инфы не даёт) Какие бывают сайты кроме...

Скажите, чем функция от функционального вызова отличается с точки зрения прерываний именно?
Скажи, чем функция от функционального вызова отличается? с точки зрения прерываний именно. Добавлено через 5 минут Кста можно и без...

Чем отличается функция Max от Max<>?
Чем отличается функция Max от Max&lt;&gt;? const n = 10; var a: List&lt;integer&gt;; b: array of integer; begin for var...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru