Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
17.03.2014, 23:38     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #1
Внешняя
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;
  }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2014, 23:38     Чем внешняя функция отличается от дружественной кроме как синтаксисом?
Посмотрите здесь:

Внешняя функция с++ C++
C++ Чем отличается this от *this?
Внешняя функция C++
Как пользоваться с scanf, и чем отличается от cout C++
C++ Как создать прямоугольную матрицу и чем она отличается от квадратной?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
17.03.2014, 23:42     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #2
Что в вашем понимании "внешняя" функция?
И что общего между вашими двумя примерами?
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
17.03.2014, 23:47     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #3
Дружественная функция имеет доступ к private данным того класса, в котором она была объявлена и не является членом класса.
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
17.03.2014, 23:51  [ТС]     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #4
John Prick, Внешняя - располагается вне класса, но компилятором трактуется как встроенная.
Общее то, что их тело располагается вне класса.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
17.03.2014, 23:56     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #5
delexa, вашем примере под названием "внешняя функция" написана функция-член класса. То, что вы написали её реализацию вне класса, а не при объявлении, не имеет практически никакого значения. (Кроме разных аспектов встроенности, которые не заканчиваются на объявлении inline перед функцией).
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
17.03.2014, 23:58  [ТС]     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #6
John Prick, значит единственное различие в том, что дружественные функции не являются членами класса?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
18.03.2014, 00:06     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #7
В ваших примерах между этими функциями столько отличий, что даже сложно сразу подобрать ответ.
Конкретно по примеру с объёмом вообще не получится сделать такую функцию-член (нестатическую) и дружественную функцию, чтобы они различались только тем, что одна бы являлась членом класса, а другая - нет.
Вот так, по идее, должен был выглядеть ваш пример:
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;
}
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,593
18.03.2014, 00:14     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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,
                       // где ее определение влияет только на связывание(!)
};
Методы класса всегда привязаны к объекту класса. Они имеют неявный параметр для доступа к данным объекта.
Статические функции класса имеют доступ к данным класса (статическим) и данным объекта (если в такую функции передать этот объект).
Дружественные функции класса могут быть как методами, так и свободными функциями, имеют доступ к данным класса, который определил их дружественными себе. Но для этого туда (в функцию) нужно передать каким-либо образом объект этого класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 00:50     Чем внешняя функция отличается от дружественной кроме как синтаксисом?
Еще ссылки по теме:

Чем C++ отличается от C++ Builder? C++
Чем отличается функция с __stdcall и без C++
C++ Чем отличается if от (?:)

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

Или воспользуйтесь поиском по форуму:
Splitty
 Аватар для Splitty
5 / 5 / 2
Регистрация: 15.12.2013
Сообщений: 34
18.03.2014, 00:50     Чем внешняя функция отличается от дружественной кроме как синтаксисом? #9
"Внешняя" функция не имеет никакого доступа к классу и не являеться его частью, дружественная функция имеет доступ к классу, хотя не являеться его частью(при этом она объявляеться внутри класса)
Yandex
Объявления
18.03.2014, 00:50     Чем внешняя функция отличается от дружественной кроме как синтаксисом?
Ответ Создать тему
Опции темы

Текущее время: 09:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru