Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / перегрузка оператора больше / 12 сообщений из 12, страница 1 из 1
04.04.2019, 10:59
    #39796254
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
template <typename T> class Node {
	
	public:		
		Node<T>( T _data ){  
			data = _data;
		};

		const T& operator=(const T& rv) const {
        	data = rv.getData();
    	}

		bool operator>(const Node<T>& lv, const Node<T>& rv) {
        	return lv.getData() > rv.getData();
    	}

	private:
		T data;
};



выдает ошибку: error: ‘bool Node<T>::operator>(const Node<T>&, const Node<T>&)’ must take exactly one argument
bool operator>(const Node<T>& lv, const Node<T>& rv) {

не могу понять - что делаю не так???
...
Рейтинг: 0 / 0
04.04.2019, 11:02
    #39796257
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
пропуслил метод
Код: plaintext
1.
2.
3.
		T getData(){
			return data;
		}
...
Рейтинг: 0 / 0
04.04.2019, 11:15
    #39796275
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
вроде как получилось
Код: plaintext
1.
2.
3.
		bool operator>( const Node<T>& rv) {
        	return data > rv.getData();
     	}
...
Рейтинг: 0 / 0
04.04.2019, 11:50
    #39796314
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
но все равно не работает
...
Рейтинг: 0 / 0
04.04.2019, 12:03
    #39796333
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
akalend
Код: plaintext
1.
2.
3.
		bool operator>( const Node<T>& rv) const {
        	return data > rv.getData();
     	}
...
Рейтинг: 0 / 0
04.04.2019, 12:51
    #39796390
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
akalendне могу понять - что делаю не так???если оператор - член класса, то должен быть один аргумент, а если хочется иметь оператор с двумя аргументами, то он должен быть свободной функцией, возможно другом класса
...
Рейтинг: 0 / 0
04.04.2019, 14:18
    #39796483
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
NekZ, сделал константным, но все равно не работает.

Код: plaintext
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.
template <typename T> class Node {
	
	public:		
		Node<T>( T _data ){  
			data = _data;
		};

		Node<T>(){};

		T getData(){
			return data;
		}


		const T& operator=(const T& rv) const {
        	data = rv.getData();
    	}

		bool operator>( const Node<T>& rv) const {
        	return (data > rv.getData());
     	}

		bool operator>=( const Node<T>& rv)  const {
        	return (data >= rv.getData());
     	}

		bool operator<( const Node<T>& rv)  const {
        	return (data < rv.getData());
     	}

	private:
		T data;
};


// сравнение
Node<int> n1(10);
Node<int> n2(20);
 if ( &n1 > &n2 ) printf("10 > 20"); 
 else printf("10 < 20");
if ()
...
Рейтинг: 0 / 0
04.04.2019, 14:29
    #39796494
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
так работает, а вот если использовать в такой конструкции:
Код: plaintext
1.
while( i && &nd >= &elem[i] ) {...}

где elem - массив elem = new Node<T>[...]();

скорее всего я не правильно обращаюсь к элементу массива.
...
Рейтинг: 0 / 0
04.04.2019, 15:49
    #39796600
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
akalend,

В таких случаях не требуется указывать шаблонный тип в операторах и конструкторах:

Код: plaintext
1.
2.
3.
bool operator>( const Node& rv) const {
   return data > rv.getData();
}
...
Рейтинг: 0 / 0
04.04.2019, 15:59
    #39796617
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
akalendскорее всего я не правильно обращаюсь к элементу массива.

А зачем ты сравниваешь адреса вместо значений?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.04.2019, 16:09
    #39796631
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
[quot Dimitry Sibiryakov]А зачем ты сравниваешь адреса вместо значений?

ясно, но если передавать значения, то не компилится,
Код: plaintext
1.
while( i && nd >= elm[i] ) {...}


In instantiation of ‘bool Node<T>::operator>=(const Node<T>&) const [with T = int]’:
heap.cpp:152:23: required from ‘void Heap<T>::push_back(T) [with T = int]’
heap.cpp:341:16: required from here
heap.cpp:44:23: error: passing ‘const Node<int>’ as ‘this’ argument of ‘T Node<T>::getData() [with T = int]’ discards qualifiers [-fpermissive]
return (data >= rv.getData());
...
Рейтинг: 0 / 0
04.04.2019, 16:14
    #39796639
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перегрузка оператора больше
getData() тоже const объяви.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / перегрузка оператора больше / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]