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

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

Войти
Регистрация
Восстановить пароль
 
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Френдовый оператор умножения - C++

21.04.2011, 07:17. Просмотров 639. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A
{
 protected A (...);
...
};
...
class B
{
 public:
 ...
 friend
 B operator *  (double  x, A &a); // Эту строку компил проглотил
};
...
B operator *(double x, A &a) // А вот эта строка ему не нравится. Почему?
{
...
}
Добавлено через 1 минуту
Пишет:
make cspm
g++ -o cspm cspm.cpp -lX11 -L/usr/X11R6/lib
cspm.cpp:77: error: expected constructor, destructor, or type conversion before ‘operator’
cspm.cpp:88: error: no match for ‘operator*’ in ‘1.0e+1 * TLengthUnit::Meter’
make: *** [cspm] Ошибка 1
Добавлено через 51 секунду
77-я строка здесь 15-я.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 07:17     Френдовый оператор умножения
Посмотрите здесь:

C++ Таблица умножения
C++ перегрузка умножения
C++ Перегрузка умножения
Таблица умножения C++
C++ Таблица умножения
C++ Таблица умножения
Таблица умножения C++
таблица умножения C++
Табличка умножения C++
C++ Таблица умножения
Таблица умножения С++ C++
Реализовать оператор умножения класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
21.04.2011, 09:54     Френдовый оператор умножения #2
Так работает.

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
#include <iostream>
 
class A
{
public:
    A(int a):
    m_a(a)
    {
    }
 
    int get_a() const
    {
        return m_a;
    }
 
private:
    int m_a;
};
 
class B
{
public:
    B(double b):
    m_b(b)
    {
    }
 
    double get_b() const
    {
        return m_b;
    }
 
    friend B operator *  (double  x, A &a);
 
private:
    double m_b;
};
 
B operator*(double x, A &a)
{
    return B (x * a.get_a());
}
 
int main()
{
    A a(10);
 
    B b = 1.55 * a;
 
    std::cout << b.get_b() << std::endl;
 
    return 0;
}
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.04.2011, 11:59  [ТС]     Френдовый оператор умножения #3
Оказалось, я пропустил букуву в имени типа (на саммо деле оно длинннее). Но теперь другая пробелема.
silent_1991
Эксперт С++
4951 / 3027 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
21.04.2011, 12:05     Френдовый оператор умножения #4
taras atavin, вот по этой причине не надо выкладывать упрощённые варианты с обобщениями, выкладывайте именно тот код, который не работает.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.04.2011, 12:11  [ТС]     Френдовый оператор умножения #5
Так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class A
{
 protected A (...);
...
};
...
class B
{
 public:
 ...
 friend
 B operator *  (double  x, A &a); 
};
...
B operator *(double x, A &a)
{
...
}
 
A a;
B b=10.0*a;
компилит, а так:
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
class A
{
 protected:
  A (...);
...
 public:
 const static A a;
};
const A a(...);
...
class B
{
 public:
 ...
 friend
 B operator *  (double  x, A &a); // Эту строку компил проглотил
};
...
B operator *(double x, A &a) // А вот эта строка ему не нравится. Почему?
{
...
}
 
B b=10.0*A::a;
ругается на последнюю строку. Пишет:
error: no match for ‘operator*’ in ‘1.0e+1 * A::a’
Добавлено через 1 минуту
Проект велосипедистый со своими типами размерных величин и единиц измеренения.
Yandex
Объявления
21.04.2011, 12:11     Френдовый оператор умножения
Ответ Создать тему
Опции темы

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