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

Дружественные функции - C++

Восстановить пароль Регистрация
 
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
15.07.2013, 16:40     Дружественные функции #1
Написал програмку по Лафоре. Однако на объявлении дружественной ф-и происходит ошибка компиляции. Может кто знает в чем может быть проблемма?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<windows.h>
#include<iostream>
#include<conio.h>
using namespace std;
//***********************************************************************************//
class Distance
{
private:
    int feet;
    float inches;
public:
    Distance(): feet(0), inches(0)
    {}
    Distance(float fltfeet)
    {
        feet = static_cast<int>(fltfeet);
        inches = 12*(fltfeet - feet);
    }
    Distance(int ft, float in)
    {
        feet = ft;
        inches = in;
    }
    void showdist()
    { cout << feet << "\'-" << inches << "\""; }
    friend Distance operator+ (Distance, Distance);
};
Distance operator+ (Distance d1, Distance d2)
{
    int f = d1.feet + d2.feet;
    float in = d1.inches + d2.inches;
    if (in >= 12.0)
    {
        in -=12.0;
        f++;
    }
    return Distance(f, in);
}
//***********************************************************************************//
int main() 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);   
 
    Distance d1 = 2.5, d2 = 1.25, d3;
    
    cout << "\nd1 = "; d1.showdist();
    cout << "\nd2 = "; d2.showdist();
 
    d3 = 10.0 + d1;
    cout << "\nd3 = "; d3.showdist();
 
    d3 = d1 + 10.0;
    cout << "\nd3 = "; d3.showdist();
 
    getch();
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
--------------------Configuration: partaray - Win32 Debug--------------------
Compiling...
partaray.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\Lesson\partaray.cpp(26) : fatal error C1001: INTERNAL COMPILER ERROR
        (compiler file 'msc1.cpp', line 1786) 
         Please choose the Technical Support command on the Visual C++ 
         Help menu, or open the Technical Support help file for more information
Error executing cl.exe.
 
partaray.obj - 1 error(s), 0 warning(s)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 16:40     Дружественные функции
Посмотрите здесь:

C++ дружественные функции
C++ Дружественные функции
C++ дружественные функции
Дружественные функции C++
C++ Дружественные функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
15.07.2013, 16:43     Дружественные функции #2
Ilot, написано же: Внутренняя ошибка компилятора.

Добавлено через 22 секунды
У меня твой код компилится и запускается
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
15.07.2013, 16:49  [ТС]     Дружественные функции #3
Dani, пошел менять компиллятор.
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.07.2013, 16:58     Дружественные функции #4
Ilot, какая-то лохматая версия студии?
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 17:03     Дружественные функции #5
Это как называется:
C++
1
2
3
4
5
class Distance {
    ...
    friend Distance operator+ (Distance, Distance);
    ...
}
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
15.07.2013, 17:09     Дружественные функции #6
Цитата Сообщение от lazybiz Посмотреть сообщение
Это как называется:
если не делать акцент на отсутствии ссылочного типа и модификатора const, то вполне обычное объявление дружественной функции. Что не так?
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 19:42     Дружественные функции #7
Просто мне кажется от этого нет никакой практической пользы (от friend), хотя, могу и ошибаться...
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
15.07.2013, 20:29     Дружественные функции #8
Цитата Сообщение от lazybiz Посмотреть сообщение
практической пользы
Ilot, написал же, что писал программу по
Цитата Сообщение от Ilot Посмотреть сообщение
Лафоре
Следовательно, он пытается научиться писать дружественные функции. Разве этого не достаточно?
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 20:33     Дружественные функции #9
Достаточно, просто ты меня неправильно понял.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
16.07.2013, 08:37  [ТС]     Дружественные функции #10
Цитата Сообщение от lazybiz Посмотреть сообщение
Просто мне кажется от этого нет никакой практической пользы (от friend), хотя, могу и ошибаться...
Хорошо оставим перегрузку оператора +:
C++
1
2
3
4
5
6
7
8
9
10
11
    Distance operator+ (Distance d)
    {
        int f = feet + d.feet;
        float in = inches + d.inches;
        if (in >= 12.0)
        {
            in -=12.0;
            f++;
        }
        return Distance(f, in);
    }
Что будет если выполнить эти действия?:
C++
1
2
3
4
5
    d3 = d1 + 10.0;
    cout << "\nd3 = "; d3.showdist();
 
    d3 = 10.0 + d1;
    cout << "\nd3 = "; d3.showdist();
Это как называется:
C++
1
2
3
4
5
class Distance {
    ...
    friend Distance operator+ (Distance, Distance);
    ...
}
Если думаете, что это перегрузка операции + то сильно заблуждаетесь так как эта функция не является методом класса и осуществляет доступ к скрытым полям класса по механизму дружественных функций, а не как метод.
Так что идите учите русский язык, а заодно и с++.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.07.2013, 09:37     Дружественные функции #11
Ilot, Я бы посоветовал общаться аккуратнее. Человек ошибся, бывает.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
16.07.2013, 09:43  [ТС]     Дружественные функции #12
Человек ошибся, бывает.
ForEveR, согласен. Однако этот товарищ высказался матом в мой адрес, к счастью его пост уже почищен. Вот именно это мне не понравилось. Мало того, что не прав так еще и не цензурной лексикой выражается. Вам это будет приятно? Мне нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 09:46     Дружественные функции
Еще ссылки по теме:

Дружественные функции С++ C++
C++ Дружественные функции. Наследование. Перегрузка функции
Дружественные функции C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.07.2013, 09:46     Дружественные функции #13
Ilot, Ну. Он не высказывался по отношению к Вам. Он просто высказал свое мнение, относительно кода (естественно не совсем корректно высказал мнение), посему предлагаю проехать данный вопрос.
Yandex
Объявления
16.07.2013, 09:46     Дружественные функции
Ответ Создать тему
Опции темы

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