Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
1

Почему операторы описываются без static?

15.01.2019, 15:35. Показов 1139. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include <iostream>
*
class Counter
{
public:
****Counter(int sec)
****{
********seconds = sec;
****}
****void display() 
****{
********std::cout << seconds << " seconds" << std::endl;
****}
****Counter operator + (Counter c2)
****{
********return Counter(this->seconds + c2.seconds);
****}
****int operator + (int s)
****{
********return this->seconds + s;
****}
int seconds;
};
*
int main()
{
****Counter c1(20);
****Counter c2(10);
****Counter c3 = c1 + c2;
****c3.display();********** // 30 seconds
****int seconds = c1 + 25;* // 45
*****
****return 0;
}
Почему операторы описываются без static? В C# операторы описываются как static-члены класса:
C#
1
public static T operator+(T x, T y) => new T();
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2019, 15:35
Ответы с готовыми решениями:

Почему переменная объявленная static работает не корректно?
Переменная j=25 я её обозначил как static int j; и присвоил число 25. Значит эта переменная должна...

Может ли быть метод virtual static? И почему?
Очень нужно объяснение! В интернете ничего конкретно про это не написано.

Почему перегрузку операторов в C++ не даёт сделать как static ?
Добрый день. Допустим, есть некий сложный класс Vector , и я хочу перегрузить оператор + ...

Почему в файле все функции объявлены как static?
Привет! В исходном коде Android я нашёл один файл нативного кода на C/C++. Все функции помечены...

2
1536 / 456 / 101
Регистрация: 17.05.2015
Сообщений: 1,424
15.01.2019, 16:13 2
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
В C# операторы описываются как static-члены класса:
public static T operator+(T x, T y) => new T();
Видите, у вас два операнда фигурируют?

Здесь же присутствует только правосторонний операнд:
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Counter operator + (Counter c2)
В качестве левостороннего операнда используется *this.
this доступен только для не-статичных методов класса.
1
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
16.01.2019, 14:53 3
В С++ операторы с аналогичным набором аргументов вообще описываются вне класса, а для доступа к полям классов их объявляют в классе как friend .

Добавлено через 3 минуты
Если второй аргумент внутри оператора не меняется, то лучше его объявлять как const Counter &. Для аргументов в виде простых типов (которые могут поместиться в регистр процессора) лучше использовать просто const, не ссылку.

C++
1
2
3
4
5
6
7
8
Counter operator + (const Counter &c1, const Counter &c2)
{
    return Counter(c1.seconds + c2.seconds);
}
int operator + (const Counter &c1, const int s)
{
    return c1.seconds + s;
}
Также можно сделать не конструирование объекта, а модификацию переданного по значению объекта (переданный в с1 аргумент не изменится)

C++
1
2
3
4
5
Counter operator + (Counter c1, const Counter &c2)
{
    c1.seconds += c2.seconds;
    return с1;
}
Добавлено через 1 минуту
Но если такие операторы с 2 операндами добавлены, то объявить аналогичные внутри класса, наподобие Counter operator + (const Counter &c2) уже нельзя.

Добавлено через 5 минут
И ещё. В С++ начиная с 14 стандарта можно объявить операторы и подобно С#,

C++
1
2
3
4
auto operator+(const Counter &c1, const Counter &c2) -> Counter
{
    return Counter(c1.seconds + c2.seconds);
}
0
16.01.2019, 14:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2019, 14:53
Помогаю со студенческими работами здесь

Вложенные операторы if. Без else
Доброго времени суток. Задание: Создайте класс с именем Date, включающий в качестве элементов...

Почему нужен static?
Объясните пожалуйста, почему при создании объекта класса А (класс А объявлен в классе Main)...

Почему static char []
Здравствуйте. Почему char szAppName = &quot;HelloWin&quot; как static? Не могу понять в чем смысл, туплю....

Qt 5.1.1 Static (запуск без dll)
Доброй ночи читатель и юзер Qt-фреймвёрка. Я не знал кому конкретно написать и напишу сюда. Дело в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru