2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134

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

17.03.2014, 23:38. Показов 6853. Ответов 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 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,558
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 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,558
17.03.2014, 23:56
delexa, вашем примере под названием "внешняя функция" написана функция-член класса. То, что вы написали её реализацию вне класса, а не при объявлении, не имеет практически никакого значения. (Кроме разных аспектов встроенности, которые не заканчиваются на объявлении inline перед функцией).
1
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
17.03.2014, 23:58  [ТС]
John Prick, значит единственное различие в том, что дружественные функции не являются членами класса?
0
2393 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,558
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru