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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
#1

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

15.07.2013, 16:40. Просмотров 737. Ответов 12
Метки нет (Все метки)

Написал програмку по Лафоре. Однако на объявлении дружественной ф-и происходит ошибка компиляции. Может кто знает в чем может быть проблемма?
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)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 16:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дружественные функции (C++):

Дружественные функции. Наследование. Перегрузка функции - C++
Здравствуйте, у меня проблема Не знаю куда Вставить имеющийся код(В какую строчку или строчки кода). Первый код это было 1 задание, 2-ой...

Дружественные функции - C++
Напишите программу, вычеркивающую из данного слова все буквы «а» (так, чтобы, например, из слова «заноза» получилось «зноз»), через...

Дружественные функции - C++
Создать объект динамический стек. Перегрузить операции +, +=, -= (с извлечением элемента).

дружественные функции - C++
Тема: дружественные функции Напишите программу обращения слова. Помогите решить на С++

Дружественные функции - C++
Задание: создать дружественные функции . Вроде всё работает, но возможно я неправильно что то написала. Почему так часто вызывается...

Дружественные функции С++ - C++
Здравствуйте, помогите пожалуйста решить задачку с помощью дружественных функций: Считайте текст и выведите на экран исходный текст, а...

12
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
15.07.2013, 16:43 #2
Ilot, написано же: Внутренняя ошибка компилятора.

Добавлено через 22 секунды
У меня твой код компилится и запускается
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
15.07.2013, 16:49  [ТС] #3
Dani, пошел менять компиллятор.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.07.2013, 16:58 #4
Ilot, какая-то лохматая версия студии?
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 17:03 #5
Это как называется:
C++
1
2
3
4
5
class Distance {
    ...
    friend Distance operator+ (Distance, Distance);
    ...
}
2
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.07.2013, 17:09 #6
Цитата Сообщение от lazybiz Посмотреть сообщение
Это как называется:
если не делать акцент на отсутствии ссылочного типа и модификатора const, то вполне обычное объявление дружественной функции. Что не так?
1
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 19:42 #7
Просто мне кажется от этого нет никакой практической пользы (от friend), хотя, могу и ошибаться...
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
15.07.2013, 20:29 #8
Цитата Сообщение от lazybiz Посмотреть сообщение
практической пользы
Ilot, написал же, что писал программу по
Цитата Сообщение от Ilot Посмотреть сообщение
Лафоре
Следовательно, он пытается научиться писать дружественные функции. Разве этого не достаточно?
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
15.07.2013, 20:33 #9
Достаточно, просто ты меня неправильно понял.
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 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);
    ...
}
Если думаете, что это перегрузка операции + то сильно заблуждаетесь так как эта функция не является методом класса и осуществляет доступ к скрытым полям класса по механизму дружественных функций, а не как метод.
Так что идите учите русский язык, а заодно и с++.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
16.07.2013, 09:37 #11
Ilot, Я бы посоветовал общаться аккуратнее. Человек ошибся, бывает.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
16.07.2013, 09:43  [ТС] #12
Человек ошибся, бывает.
ForEveR, согласен. Однако этот товарищ высказался матом в мой адрес, к счастью его пост уже почищен. Вот именно это мне не понравилось. Мало того, что не прав так еще и не цензурной лексикой выражается. Вам это будет приятно? Мне нет.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
16.07.2013, 09:46 #13
Ilot, Ну. Он не высказывался по отношению к Вам. Он просто высказал свое мнение, относительно кода (естественно не совсем корректно высказал мнение), посему предлагаю проехать данный вопрос.
1
16.07.2013, 09:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 09:46
Привет! Вот еще темы с ответами:

Дружественные функции - C++
Всем привет,объясните пожалуйста,почему мой код не выводит информацию из private, даже если я указал как friend нужную функцию(наверное)....

Дружественные функции - C++
Создать класс «студент» (его фамилия, имя, год рождения и год поступления). Написать: а) член-функцию печати информации о студенте; ...

Дружественные функции - C++
Тут выдает ошибку Помогите Ошибка 3 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает...

Дружественные функции - C++
День добрый. class Distance { private: int fut; int inch; public: Distance():fut(0),inch(0){}; Distance(int f,int...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru